Обычно я кодирую свои данные в NSFileWrapper
следующим образом (я опускаю бит NSFileWrapper):
-(NSData*)encodeObject:(id<NSCoding>)o {
@autoreleasepool {
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:o forKey:@"data"];
[archiver finishEncoding];
return data;
}
}
И я обычно возвращаю свои данные, когда делаю это:
- (id)decodeObjectFromWrapperWithPreferredFilename:(NSString *)p {
NSFileWrapper *wrapper = [self.fileWrapper.fileWrappers objectForKey:p];
if (!wrapper) {
NSLog(@"Unexpected error: Couldn't find %@ in file wrapper!", p);
return nil;
}
NSData *data = [wrapper regularFileContents];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSLog(@"%@", [unarchiver decodeObjectForKey:@"data"]);
return [unarchiver decodeObjectForKey:@"data"];
}
Иногда я возвращаю NSData
(это не ноль), но [unarchiver decodeObjectForKey:@"data"]
возвращает NIL. Похоже, что для ключа @"data" объекта нет, хотя он должен быть. Я предполагаю, что что-то пошло не так при кодировании, но я не уверен, как это исправить. Могу ли я просто взять все, что находится в data
, и закодировать его, не беспокоясь о том, есть ли у него правильный ключ? Я имею в виду, что должен быть только один ключ «данные».
return [NSKeyedArchiver archivedDataWithRootObject:o];
иreturn [NSKeyedUnarchiver unarchiveObjectWithData:data];
? - person deanWombourne   schedule 01.10.2012