我通常将数据编码在 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
(它不是 nil),但 [unarchiverdecodeObjectForKey:@"data"]
将返回 NIL。看起来好像没有键@“data”的对象,尽管应该有。我猜编码时一定出了问题,但我不知道如何解决这个问题。我可以只获取 data
中的内容并对其进行编码,而不用担心它是否拥有正确的 key 吗?我的意思是应该只有一个关键“数据”。
最佳答案
为什么你的代码如此复杂:) NSKeyedArchiver
类具有辅助方法,可以更简单地完成你想要的事情:
// to turn an object into NSData
return [NSKeyedArchiver archivedDataWithRootObject:o];
// To turn NSData into your object again
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
关于ios - 在 NSKeyedUnarchiver 对象中找不到 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12671758/