1. 程式人生 > >iOS NSUserDefaults使用報錯問題

iOS NSUserDefaults使用報錯問題

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]; }

希望小夥伴們能有點收穫