2012-05-17 4 views
1

을 구현하는 동안 예외가 발생하여 NSUsersDefaults과 함께 사용자 지정 개체의 배열을 저장하려고하기 때문에. 나는 그 안에 비 속성이 있다는 오류를 계속해서 받았기 때문에 이것을 NSData에 보관하기로 결정했습니다. 이제이 오류가 발생합니다 : "이해할 수없는 아카이브". 내가 (다시 모든 널 (null)에 대한 테스트) 아카이브 해제하고 방법NSData 예외 - "이해할 수없는 보관 파일"

다음
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:anotherArray]; 
for (int i = 0; i < array.count; i++) { 
    CustomObj *obj = [array objectAtIndex:i]; 
    NSData *newdata = [NSKeyedArchiver archivedDataWithRootObject:obj]; 
    [array replaceObjectAtIndex:i withObject:newdata]; 
} 
NSArray *newArray = [[NSArray alloc] initWithArray:array]; 
[coder setObject:newArray forKey:@"key"]; 

은 다음과 같습니다 : 여기

내가 (내가 널 (null)로 모든 개체를 테스트했습니다, 그 비는) 보관하고 어떻게

if (!arrayM) { arrayM = [[NSMutableArray alloc] init]; NSLog(@"initialized"); } 
else { 
    for (int i = 0; i < arrayM.count; i++) { 
     NSData *data = [arrayM objectAtIndex:i]; 
     --> The exception happens here: CustomObj *obj = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
     [arrayM replaceObjectAtIndex:i withObject:obj]; 
    } 
} 

답변

1

NSKeyedArchiver로 보관하지 않았습니까? 그렇다면 왜 NSKeyedUnarchiver를 사용하여 데이터를 다시 가져올 수 있으리라고 생각합니까? 당신이하고 싶은 방식은 이것과 같습니다. 사용자 지정 개체를 NSCoding 프로토콜을 따르도록 만들고 두 가지 방법 (인코딩 및 디코딩)을 구현합니다. 그런 다음 사용자 지정 개체 배열에 NSKeyedArchiver를 사용하여 보관할 수 있습니다. NSKeyedArchiver는 각 객체 및 포함 된 모든 객체 (컬렉션 인 경우)에서 encodeWithCoder를 호출합니다.

EDIT : 각 개체가 아닌 배열에서 NSKeyedArchiver를 호출하십시오. 그런 다음 보관을 취소하면 다시 보관할 수 있습니다.

+0

위의 코드로 변경하면 여전히 동일한 오류가 발생합니다. 그리고 나는 encode 메소드를 가지고있다. – ManOx

+0

내 편집을 참조하십시오 .... – borrrden

+0

나는 또한 그것을 시도했습니다, 그것은 내 개체에 대한 null을 반환했습니다. – ManOx