这看起来是否正确,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数组。我将修改代码并发回更新。
加里
答案 0 :(得分:1)
我很困惑为什么你这样做。您通常不会自己致电initWithCoder:
。您向编码器询问其内容并为您创建对象。该方法的整个解码部分应为id archivedObject = [NSKeyedUnarchiver unarchiveObjectWithFile:[self dataFilePath]]
,其中archivedObject
可能是您在代码中调用newCore
的数组(我不知道文件的内容,所以我'我只是猜你写的东西)。在这种情况下,你会想mutableCopy
它,因为我不认为NS * Archiver会保留可变性。
我也希望你不要期望在你的NSArray未归档时,你在帖子顶部写的initWithCoder:
方法被调用。
答案 1 :(得分:0)
“我也希望你不要期望你的initWithCoder:你在帖子顶部写的方法在这个NSArray被取消存档时被调用。”
没用。为什么你不能写出为什么不调用它?感谢
修改强> 实际上,如果数组中的对象实现NSCoding,则在恢复数组时会在每个对象上调用initWithCoding(这里的恢复意味着您调用[decoder decodeObjectForKey:@“yourArray”])。我实际上是在自己的代码中这样做的。所以我认为你写的是假的!