这是否正确,dataFilePath在磁盘上并且包含正确的数据,但是MSMutable数组在initWithCoder之后不包含任何对象?我可能只是漏掉了什么,但我想在离开之前尽快检查一下。
-(id)initWithCoder:(NSCoder *)decoder {
self = [super init];
if(self) {
[self setReactorCore:[decoder decodeObjectForKey:@"CORE"]];
}
return self;
}。
-(id)init {
self = [super init];
if(self) {
if([[NSFileManager defaultManager] fileExistsAtPath:[self dataFilePath]]) {
NSMutableData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSMutableArray *newCore = [[NSMutableArray alloc] initWithCoder:unArchiver];
[self setReactorCore:newCore];
[newCore release];
[data release];
[unArchiver release];
} else {
NSMutableArray *newCore = [[NSMutableArray alloc] init];
[self setReactorCore:newCore];
[newCore release];
}
}
return self;
}EDIT_001
我想我知道我哪里出错了,我正在归档NSData,然后尝试用它初始化我的NSMutable数组。我将重做代码,并发布一个更新。
加里
发布于 2010-03-15 17:27:13
我搞不懂你为什么要这样做。你通常不会自己打电话给initWithCoder:。你要求编码器提供它的内容,它为你创建对象。该方法的整个解码部分应该是id archivedObject = [NSKeyedUnarchiver unarchiveObjectWithFile:[self dataFilePath]],其中archivedObject大概是您在代码中调用的newCore数组(我不知道文件的内容,因此我只是从您编写的内容中猜测)。在这种情况下,您会想要mutableCopy它,因为我不认为NS*Archiver保持可变。
我还希望您不要期望您在文章顶部编写的initWithCoder:方法在此NSArray未存档时被调用。
发布于 2010-07-07 10:18:27
“我还希望您不要期望您在文章顶部编写的initWithCoder:方法在这个NSArray未存档时被调用。”
是没用的。为什么你不能写为什么不叫它?谢谢
编辑:--实际上,如果数组中的对象实现NSCoding,则在还原数组时对每个对象调用initWithCoding (还原这里意味着调用解码器decodeObjectForKey:@"yourArray")。我实际上是用我自己的代码做的。所以我觉得你写的是假的!
https://stackoverflow.com/questions/2448963
复制相似问题