我在检索包含自定义对象的已保存NSMutableArray时遇到问题。应用程序崩溃,控制台报告http://pastie.org/1226822。这是我的对象.h文件http://pastie.org/1226823。这是我的对象.m文件http://pastie.org/1226826。以下是我保存数据http://pastie.org/1226830的方法。以下是我检索数据http://pastie.org/1226831的方法。提前谢谢。
答案 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:
方法将该对象写入一个存档。一块蛋糕!