Я обычно кодировать свои данные в NSFileWrapper
, как это (я уезжаю из бита NSFileWrapper):Ключ не найден в объекте NSKeyedUnarchiver
-(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
, и закодировать его, не беспокоясь, если у него есть правильный ключ? Я имею в виду, что должны быть только один ключевой «данные».
Почему ваш код так сложно? Почему бы просто не возвратить [NSKeyedArchiver archivedDataWithRootObject: o]; 'и' return [NSKeyedUnarchiver unarchiveObjectWithData: data]; '? – deanWombourne
@deanWombourne Хороший вопрос. Я был настолько смущен NSFileWrapper, что я следовал примерам Apple и учебнику Вендерлиха .... так что, я думаю, я допустил ошибку слепо следуя свернутому коду, который я не понял на 100%. Я сейчас попробую попробовать и дам вам знать. Возможно, добавьте свой комментарий в ответ ниже? Благодаря! –
Поскольку мой комментарий на самом деле не является _answer_ вашим вопросом - возможно, была причина, по которой вам нужна была такая сложность. Однако, как нет, см. Мой ответ ниже :) – deanWombourne