3

我无法检索包含自定义对象的已保存 NSMutableArray。应用程序崩溃并且控制台报告http://pastie.org/1226822。这是我的对象 .h 文件http://pastie.org/1226823。这是我的对象 .m 文件http://pastie.org/1226826。这是我保存数据的方法http://pastie.org/1226830。这是我检索数据的方式http://pastie.org/1226831。提前致谢。

4

3 回答 3

8

固定的。我在 NSUserDefaults 中将自定义对象存储在 NSMutableArray 中使用了 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];
}
于 2010-10-17T15:52:05.990 回答
1

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

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

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

于 2010-10-17T02:39:00.540 回答
1

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

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

于 2010-10-17T02:45:04.673 回答