key 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
を返します(nilではありません)、[unarchiver decodeObjectForKey:@"data"]
はnilを返します。あるべきであっても、キー@「データ」のオブジェクトがないかのように見えます。エンコード時に何かが間違っていたに違いないと思いますが、これを撃つ方法はわかりません。data
にあるものは何でも取ることができますか、それを符号化し、それが正しいキーを持っているのであれば心配しませんか?私は1つのキー「データ」だけであるべきであることを意味します。
解決
なぜあなたのコードが複雑なのですか:) NSKeyedArchiver
クラスには、あなたがより簡単にあなたが望むものをするヘルパーメソッドがあります:
// to turn an object into NSData
return [NSKeyedArchiver archivedDataWithRootObject:o];
// To turn NSData into your object again
return [NSKeyedUnarchiver unarchiveObjectWithData:data];
. 所属していません StackOverflow