Я пытаюсь сохранить свой объект в файловой системе на iPad, но, похоже, что-то делаю не так. Вот как я заархивировал объект:
NSString *localizedPath = [self getPlistFilePath];
NSString *fileName = [NSString stringWithFormat:@"%@.plist", character.infoName];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:character];
fileName = [fileName stringByReplacingOccurrencesOfString:@" " withString:@"_"];
localizedPath = [localizedPath stringByAppendingPathComponent:fileName];
NSLog(@"File Path: %@", localizedPath);
if(data) {
NSError *writingError;
BOOL wasWritten = [data writeToFile:localizedPath options:NSDataWritingAtomic error:&writingError];
if(!wasWritten) {
NSLog(@"%@", [writingError localizedDescription]);
}
}
Теперь создается файл plist, который я могу видеть и читать в файловой системе. Когда я пытаюсь использовать следующее, чтобы разархивировать его, хотя:
NSError *error;
NSString *directory = [self getPlistFilePath];
NSArray *files = [[NSFileManager defaultManager]contentsOfDirectoryAtPath:directory error:&error];
NSMutableArray *characters = [[NSMutableArray alloc]init];
for(NSString *path in files) {
if(![path hasSuffix:@"plist"]) {
continue;
}
NSString *fullPath = [directory stringByAppendingPathComponent:path];
NSData *data = [NSData dataWithContentsOfFile:fullPath];
IRSkillsObject *object = [NSKeyedUnarchiver unarchiveObjectWithData:data]; // get EXEC_BAD_ACCESS here...
[data release];
[characters addObject:object];
}
Я получаю ошибку EXEC_BAD_ACCESS.
IRSkillsObject соответствует протоколу NSCoding
. Вы можете видеть, я прокомментировал строку, в которой я получаю сообщение об ошибке.
Я уверен, что я что-то не так делаю, но я просто не вижу этого. Я попытался пройти через отладчик (установив точку останова в методе initWithCoder:
объекта), но я не получаю никаких ошибок тогда. Фактически, он правильно размещает данные в объекте, пока я смотрю. Но когда загрузка данных завершена, выдается ошибка. Я пытался использовать метод retain
, но это не помогает.
Любая помощь, которую вы можете оказать, будет принята с благодарностью!