2010-10-17 132 views
3

我無法檢索包含自定義對象的已保存NSMutableArray。該應用程序崩潰,控制檯報告http://pastie.org/1226822。這是我的對象.h文件http://pastie.org/1226823。這是我的對象.m文件http://pastie.org/1226826。以下是我如何保存我的數據http://pastie.org/1226830。以下是我如何檢索我的數據http://pastie.org/1226831。提前致謝。使用NSKeyedArchiver將NSMutableArray保存爲NSUserDefaults

+0

剛剛試過,對我來說工作正常。沒有崩潰。 – 2010-10-17 02:32:14

回答

8

固定。我使用Brad Larson的代碼Storing custom objects in an NSMutableArray in NSUserDefaults。我認爲如何將數據添加到我的數組中有問題,但現在可以使用。

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"savedArray"]; 
if (dataRepresentingSavedArray != nil) 
{ 
    NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray]; 
    if (oldSavedArray != nil) 
      objectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray]; 
    else 
      objectArray = [[NSMutableArray alloc] init]; 
} 
+1

你也可以寫objectArray = [oldSavedArray mutableCopy] – benzado 2010-10-18 06:12:03

1

控制檯告訴你整個問題。您Assignment對象未實現 方法initWithCoder:

'NSInvalidArgumentException', reason: '-[Assignment initWithCoder:]: unrecognized selector sent to instance 0x5f04090' 

的KeyArchiver將調用你的類初始化基於解碼數據的新對象。您應該使用[decoder objectForKey:YOUR_KEY];

+0

我確實實施了它。 [解碼器objectForKey:YOUR_KEY];不可用。 – enbr 2010-10-17 15:33:29

1

問題不在於NSMutableArray或您如何調用NSKeyedArchiver。問題是數組內的對象本身不可存檔。

您需要您的對象來實現NSCoding協議。關於如何做到這一點,有大量的文檔,但基本上你只需添加一個initWithCoder:方法來創建對象的檔案,和encodeWithCoder:方法將對象寫入檔案。小菜一碟!

+0

我實現了它,但它仍然無法正常工作。 – enbr 2010-10-17 15:43:01

相關問題