NSUserDefaults保存对象数组报错
在使用NSUserDefaults的时候插入数据有时候会报以下错误:Attempt to set a non-property-list objec
这种错误的原因是插入了不识别的数据类型,NSUserDefaults支持的数据类型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系统定义的数据类型。
解决办法把数组归档之后再进行存储直接上代码
模型数据的代码
#import <Foundation/Foundation.h> @interface itemModel : NSObject
@property(nonatomic,copy)NSString* name;
@property(nonatomic,copy)NSString* number; - (instancetype)initWithDict:(NSDictionary *)dict;
+ (instancetype)appInfoWithDict:(NSDictionary *)dict;
+ (NSArray *)appinfoArrayWithArray:(NSArray *)array; @end
#import "itemModel.h"
@interface itemModel () @end
@implementation itemModel - (instancetype)initWithDict:(NSDictionary *)dict
{
self = [super init];
if (self) {
[self setValuesForKeysWithDictionary:dict];
}
return self;
} + (instancetype)appInfoWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
-(void)setValue:(id)value forUndefinedKey:(NSString *)key{ }
+ (NSArray *)appinfoArrayWithArray:(NSArray *)arr
{
NSMutableArray *arrayM = [NSMutableArray array]; for (NSDictionary *dict in arr) {
[arrayM addObject:[self appInfoWithDict:dict]];
}
return arrayM;
} -(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:@"name"]; [aCoder encodeObject:_number forKey:@"number"];
} - (id)initWithCoder:(NSCoder*)aDecoder { if (self = [super init]) { _name = [aDecoder decodeObjectForKey:@"name"];
_number = [aDecoder decodeObjectForKey:@"number"];
} return self; }
@end
使用方法
//解档获得数组
NSData * data= [[NSUserDefaults standardUserDefaults]objectForKey:@"key"];
NSArray * appArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSMutableArray * mut = [NSMutableArray arrayWithArray:appArray];
[mut addObject:mode];
//归档存储数组
NSData *data1 = [NSKeyedArchiver archivedDataWithRootObject:[mut mutableCopy]];
[userDefaults setObject:data1 forKey:@"key"];
[userDefaults synchronize];
NSUserDefaults保存对象数组报错的更多相关文章
- java使用类数组 报错Exception in thread "main" java.lang.NullPointerException
源代码如下: Point[] points=new Point[n];//Point是一个类 for(int i=0;i<n;i++) { System.out.print("请输入x ...
- mybatis问题。foreach循环遍历数组报错情况,及其解决方法
根据条件查询数据列表,mybatis查询代码如下 如果只查询属于特定部门拥有的数据权限.这需要用 String[ ] codes保存当前部门及其子部门的部门编码. 所以需要在mybatis中遍历编码数 ...
- 解决spring-boot配置文件使用加密方式保存敏感数据启动报错No decryption for FailsafeTextEncryptor. Did you configure the keystore correctly
spring-boot配置文件使用加密方式保存敏感数据 application.yml spring: datasource: username: dbuser password: '{cipher} ...
- Cookie保存中文用户名报错(500)
在用Cookie保存用户名时候,当用户名是中文的时候服务器报错了. HTTP Status 500 - An exception occurred processing JSP page /dolog ...
- Tuple解决在视图中通过razor获取控制器传递给视图的匿名对象的报错问题
C#的编译器总是将匿名类型编译成internal的,当在视图中直接使用控制器传递的匿名对象时就会报错错误代码:控制器代码视图代码执行结果: ****************************** ...
- 解决tensorflow模型保存时Saver报错:TypeError: TF_SessionRun_wrapper: expected all values in input dict to be ndarray
TypeError: TF_SessionRun_wrapper: expected all values in input dict to be ndarray 对于下面的实际代码: import ...
- nuxtjs在vue组件中使用window对象编译报错的解决方法
我们知道nuxtjs是做服务端渲染的,他有很多声明周期是运行在服务端的,以及正常的vue声明周期mounted之前均是在服务端运行的,那么服务端是没有比如window对象的location.navag ...
- win下python脚本以unix风格换行保存将会报错为编码问题 SyntaxError: encoding problem:gbk
utf-8与gbk编码都报错 从别人的github拉下来一个python脚本. 直接运行,python报错如下: File ".\drag_files_do_event.py", ...
- PostgreSQL 大对象导出报错问题分析
1.前言 在处理用户问题过程遇到一个问题.用户通过pg_dump导出 bytea 对象时,当行的大小超过 1G时,会报错: [v8r6c5b41@dbhost01 ~]$ sys_dump -t t1 ...
随机推荐
- EF调用存储过程、函数
一.ef4.1 codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题 说这个问题前 首先先说下 我使用ef4.1 codefirst的目的. 是因为可 ...
- linux - fpga-framebuff驱动
* linux/drivers/video/fpga_fb.c --fpga graphics adaptor frame buffer device * Created 16 Sep2011 * ...
- python的卸载方式和运行yum报错:No module named yum
公司测试机环境不知道给我卸了什么包,导致yum运行报错状况: 系统版本:Red Hat Enterprise Linux Server release 6.2 (Santiago) 内核版本:2.6. ...
- AJAX解惑篇(转)
这篇文章会使你对AJAX有一个基本了解,并给出两个容易上手的例子. 什么是AJAX AJAX是一个新的合成术语,隐含了两个已经存在多年的JavaScript特性,但是直到最近,随着一些诸如Gmail. ...
- 【BZOJ】1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1668 裸dp.. f[i][j]表示i行j列最大能拿到 f[i][j]=max(f[i+1][j-1 ...
- c#并行扫描端口控制台程序
static void Main(string[] args) { Console.WriteLine("请输入ip"); string ip = Console.ReadLine ...
- Hadoop1.2.1 HDFS原理
基本以图片的形式呈现给大家: .
- LeetCode 笔记系列二 Container With Most Water
题目:Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai ...
- git+sourcetree创建仓库
1.git上创建版本库 2.安装sourcetree 3.创建空目录 我本地空目录为D:/shenghuojia 4.打开sourcetree,点击clone/new ,选择clone reposit ...
- 部分 II. 保护web篇
转载:http://www.mossle.com/docs/auth/html/pt02-web.html 部分 II. 保护web篇 2012-12-5 23:42:36 org.springf ...