[英]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.