簡體   English   中英

保存到NSUserDefaults會使應用程序崩潰?

[英]Saving to NSUserDefaults crashes app?

我正在嘗試使用下面的代碼將會話保存到NSUserDefaults,由於某種原因,這樣做會使我的應用程序崩潰,並出現以下錯誤。

2015-10-31 12:38:22.327 App [13930:4844726] ***由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:'試圖插入非屬性列表對象{type =不可變的dict,count = 17,條目=> 0:狀態= 1 1:主題= {內容=“”} 2:角色= {類型=不變的字典,計數= 2,條目=> 0:2 = {內容=“經過身份驗證的用戶”} 1:3 = {內容=“管理員”}}

3:uid = 1 5:訪問權限= {contents =“ 1446319867”} 6:登錄名= {值= +1446320300,類型= kCFNumberSInt64Type} 7:圖片= 9:{contents =“ signature_format”} = 10:init = {contents =“ brittany@email.ca”} 13:簽名= {內容=“”} 14:數據= {值=假} 15:語言= {內容=“”} 16:創建= {內容=“ 1428187324”} 17 :{內容=“ rdf_mapping”} = {類型=不變字典,計數= 3,條目=> 0:rdftype = {類型=不可變,計數= 1,值=(0:{目錄=“ sioc:UserAccount”}) } 1:名稱= {類型=不變字典,計數= 1,條目=> 2:謂詞= {類型=不變,計數= 1,值=(0:{內容=“ foaf:名稱”}}}}}

2:首頁= {類型=不變字典,計數= 2,條目=> 0:類型= rel 2:謂詞= {類型=不變,計數= 1,值=(0:{內容=“ foaf:page”}) }}

}

18:時區= {contents =“ America / Los_Angeles”} 21:名稱= admin 22:key diosSession的mail = {contents =“ email@email.ca”}}} ***第一個調用堆棧:(0x183db8f5c 0x1989aff80 0x183db8ea4 0x183df5970 0x183d427c0 0x183d416d8 0x183df5c74 0x183df520c 0x183df8a1c 0x184c21138 0x1000ef5c8 0x1000f14fc 0x100120850 0x1000e8248 0x10026dd70 0x10026dd30 0x100273780 0x183d70258 0x183d6e0c0 0x183c9cdc0 0x18edf0088 0x189376f44 0x100159674 0x1991da8b8)的libc ++ abi.dylib:與類型NSException的未捕獲的異常終止

知道為什么嗎?

謝謝!

[DIOSUser userLoginWithUsername:_userField.text
                  andPassword:_passField.text
                   success:^(AFHTTPRequestOperation *op, id response) {
          // Saving to keychain/NSUserDefaults


          [[NSUserDefaults standardUserDefaults] setObject:[[DIOSSession sharedSession] user]
                                                                                  forKey:@"diosSession"];
                                        [[NSUserDefaults standardUserDefaults] synchronize];
                                        [[DIOSSession sharedSession] getCSRFTokenWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
                                            NSString *csrfToken = [NSString stringWithUTF8String:[responseObject bytes]];
                                            [[NSUserDefaults standardUserDefaults] setObject:csrfToken forKey:@"diosToken"];
                                            [[NSUserDefaults standardUserDefaults] synchronize];
                                        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                            // failure handler
                                        }];

                                        wrongLogin.hidden = YES;
                                        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
                                        MyAccountViewController *yourViewController = (MyAccountViewController *)[storyboard instantiateViewControllerWithIdentifier:@"MyAccount"];
                                        [self.navigationController pushViewController:yourViewController animated:YES];

                                        [self.activityIndicatorViewOne stopAnimating];
                                        self.activityIndicatorViewOne.hidden = YES;

                                        NSLog(@"Success!");}

                                    failure:^(AFHTTPRequestOperation *op, NSError *err) { NSLog(@"Fail!"); wrongLogin.hidden = NO; }
             ];

        }

“知道為什么嗎?”。 是:

[[NSUserDefaults standardUserDefaults] setObject:[[DIOSSession sharedSession] user]
                                          forKey:@"diosSession"];

我不知道[[DIOSSession sharedSession] user]是什么,但是只能存儲NSArrayNSDictionaryNSStringNSDataNSNumberNSDate

所以我想這就是原因。

請嘗試這個

用於設置對象:

NSData *yourData = [NSKeyedArchiver archivedDataWithRootObject:[[DIOSSession sharedSession] user]];
[[NSUserDefaults standardUserDefaults] setObject:yourData forKey:@"yourKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

獲取對象:

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"yourKey"];
    DIOSSession *object = [NSKeyedUnarchiver unarchiveObjectWithData:data];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM