自定义对象iOS的序列化数组

时间:2012-03-20 17:58:06

标签: ios serialization nsmutablearray nskeyedarchiver

我知道这里有很多资源但是,我找不到我的代码出了什么问题:

我有一个Level级和Level的两个子类:GameLevel和TransitionLevel。每个类都实现NSCoding协议。 然后,我有一个Level数组(所以它包含GameLevel和TransitionLevel类)。保存存档似乎工作正常:

NSString *archivePath = [DOCUMENT_DIRECTORY stringByAppendingPathComponent:@"levels.archive"];
[NSKeyedArchiver archiveRootObject:levels toFile:archivePath];

请注意,level是我要保存的数组。我可以看到该文件,它已创建并且似乎包含它应包含的内容。 但是当我想要检索这个数组时:

NSString *archivePath = [DOCUMENT_DIRECTORY stringByAppendingPathComponent:@"levels.archive"];
levels = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];

我有这个例外:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

我不确定我在这里缺少什么。

1 个答案:

答案 0 :(得分:1)

您的initWithCoder:实现会返回nil,代码的某些部分会尝试将nil值插入数组中。

您可以进入断点导航器(⌘6)并添加异常断点。然后,当应用程序引发异常时,Debug Navigator将显示当前执行的函数和方法的堆栈。这将允许您准确了解哪个方法尝试将nil插入到数组中。