簡體   English   中英

使用nsuserdefaults中的數據時,應用程序崩潰

[英]The app crashes when working with data from nsuserdefaults

我有一個類“ MainClass”。 該類實現NSCoding協議。 在該類中,我有一個包含另一個類“ Object”的對象的數組,該類也實現了NSCoding協議。 當我在NSUserDefaults中存檔“ MainClass”的對象,然后取消存檔並嘗試從數組中獲取“ Object”類的對象並使用其屬性時,我得到以下消息:

[NSConcreteMutableData屬性]:無法識別的選擇器已發送到實例。

我做錯了什么? 如何解決?

編輯:這是我與NSUserDefaults一起使用的代碼:

- (Settings *) readData
{
     NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
     NSData *dataRepresentingSettings = [currentDefaults objectForKey:@"data"];

     if (dataRepresentingSettings != nil) {
             return (MainClass *)[NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSettings];
     }

     return nil;
}

- (void) saveData
{
     [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self] forKey:@"data"];
     [[NSUserDefaults standardUserDefaults] synchronize];
}

有兩種選擇:

(1)您沒有保留從用戶默認中獲得的對象。 NSUserDefaults獲取對象時,該對象會自動釋放-如果要保留它,則必須retain它。

(2)您忘記了對其進行存檔。 您使用NSKeyedArchiver來存檔您的對象,但沒有取消存檔:)

您可能已經做了類似的事情

Object *object = [defaults objectForKey:@"object"];

代替

NSData *data = [defaults objectForKey:@"object"];
Object *object = [NSKeyedUnarchiver unarchiveObjectWithData:data];

注意:不要忘記我的示例中的object仍然是自動釋放的。 如果要保留它,則必須保留它;)

暫無
暫無

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

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