1.NSUserDefaults插入报错attempt to insert non-property list object
在使用NSUserDefaults的时候插入数据有时候会报以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSUserDefaults setObject:forKey:]: attempt to insert non-property list object {
array = (
{
481 = {
msg = {
1413462307 = "[3197]\U4e8c\U5341\U516b\U56de\U590d\U4e86\U4f60\Uff1a\U4f60\U6211";
};
"new_msg" = 1;
"usr_id" = 2;
"usr_name" = "<null>";
"usr_tx" = "<null>";
};
}
);
} for key newMsgArrayDict'
这种错误的原因是插入了不识别的数据类型,NSUserDefaults支持的数据类型有 NSString、 NSNumber、NSDate、 NSArray、NSDictionary 、BOOL、NSInteger、NSFloat等系统定义的数据类型。
自定义的类型需要转成NSData再存入。
例
/* 当图片不为空时显示图片并保存图片 */
if (image != nil)
{
/* 以下是保存文件到沙盒路径下 */
/* 把图片转成NSData类型的数据来保存文件 */
NSData *data;
/* 判断图片是不是png格式的文件 */
if (UIImagePNGRepresentation(image))
{
/* 返回为png图像 */
data = UIImagePNGRepresentation(image);
}
else
{
/* 返回为JPEG图像 */
data = UIImageJPEGRepresentation(image, 1.0);
}
/* 保存 */
[self andInfo:data];
// 将图片显示在界面上
self.person.personhead = [UIImage imageWithData:data];
[self.myTableView reloadData];
}
-(void)andInfo:(NSObject *)headimg{
//使用NSUserDefaults来保存用户数据
[[NSUserDefaults standardUserDefaults] setObject:headimg forKey:@"imgheader"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
希望小伙伴们能有点收获