私は通常、次の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
正しいキーを持っているかどうかを心配することなく、入っているものをすべて取り出してエンコードできますか?つまり、重要な「データ」は1つだけである必要があります。