使用NSKeyedArchiver将NSMutableArray保存到NSUserDefaults

时间:2010-10-17 02:05:29

标签: iphone nsmutablearray nsuserdefaults nskeyedarchiver

我在检索包含自定义对象的已保存NSMutableArray时遇到问题。应用程序崩溃,控制台报告http://pastie.org/1226822。这是我的对象.h文件http://pastie.org/1226823。这是我的对象.m文件http://pastie.org/1226826。以下是我保存数据http://pastie.org/1226830的方法。以下是我检索数据http://pastie.org/1226831的方法。提前谢谢。

3 个答案:

答案 0 :(得分:8)

固定。我在Storing custom objects in an NSMutableArray in NSUserDefaults使用了Brad Larson的代码。我认为我将数据添加回数组的方式存在问题,但现在可以正常工作。

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 :(得分:1)

控制台告诉你整个问题。您的Assignment对象未实现 方法initWithCoder:

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

KeyArchiver将根据解码数据调用您的类来初始化一个新对象。您应该使用[decoder objectForKey:YOUR_KEY];

答案 2 :(得分:1)

问题不在于NSMutableArray或您如何调用NSKeyedArchiver。问题是数组中的对象本身不可存档。

您需要对象来实现NSCoding协议。有很多关于如何做到这一点的文档,但基本上你只需添加一个initWithCoder:方法来从一个存档中创建一个对象,一个encodeWithCoder:方法将该对象写入一个存档。一块蛋糕!