문제

나는 보통 내 데이터를 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];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top