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
뒤로(0이 아님), 하지만 [unarchiver decodeObjectForKey:@"data"]
NIL을 반환합니다.@"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