我通常以这样的方式编码我的数据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),但[unarchiver decodeObjectForKey:@"data"]
会返回 NIL。看起来好像没有键 @"data" 的对象,即使应该有。我想编码时一定出了问题,但我不知道如何解决这个问题。我可以只取其中的任何内容data
并对其进行编码,而不用担心它是否有正确的密钥吗?我的意思是应该只有一个关键的“数据”。