iOS NSUserDefaults使用報錯問題
阿新 • • 發佈:2019-01-23
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];
}
希望小夥伴們能有點收穫