在NSKeyedUnarchiver对象中找不到密钥
-
12-12-2019 - |
题
我通常在一个编码我的数据 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"]
将返回零。看起来好像键@"data"没有对象,即使应该有。我想编码时肯定出了什么问题,但我不确定如何解决这个问题。我能拿走里面的东西吗? data
并对其进行编码,而不是担心它是否得到了正确的密钥?我的意思是应该只有一个关键的"数据"。
解决方案
为什么你的代码如此复杂:) NSKeyedArchiver
类有帮助器方法,可以更简单地做你想要的事情 :
// to turn an object into NSData
return [NSKeyedArchiver archivedDataWithRootObject:o];
// To turn NSData into your object again
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
不隶属于 StackOverflow