Does this seem right, the dataFilePath is on disk and contains the right data, but the MSMutable array does not contain any objects after the initWithCoder? I am probably just missing something, but I wanted to quickly check here before moving on.
-(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
I think I know where I am going wrong, I am archiving NSData and then trying to initialise my NSMutable array with it. I will rework the code and post back with an update.
gary
I am confused as to why you’re doing things this way. You do not normally call
initWithCoder:yourself. You ask the coder for its contents and it creates the objects for you. The whole decoding part of that method should beid archivedObject = [NSKeyedUnarchiver unarchiveObjectWithFile:[self dataFilePath]], wherearchivedObjectis presumably the array you callnewCorein your code (I don’t know the contents of the file, so I’m just guessing from what you wrote). In that case, you’ll want tomutableCopyit, since I don’t think NS*Archiver preserves mutability.I also hope you aren’t expecting your
initWithCoder:method that you wrote at the top of your post to be called when this NSArray is unarchived.