2011-09-13 3 views
0

"MainClass"클래스가 있습니다. 이 클래스는 NSCoding 프로토콜을 구현합니다. 이 클래스에는 NSCoding 프로토콜을 구현하는 또 다른 클래스 "Object"의 객체가있는 배열이 있습니다. 그때 NSUserDefaults에서 "MainClass"의 객체를 보관하고 때를 보관 해제 및 배열 클래스 "개체"의 목적을 얻을 내가 메시지를 얻을 다음 그것을 속성을 사용하려고 :nsuserdefaults에서 데이터로 작업 할 때 응용 프로그램이 작동하지 않습니다.

[NSConcreteMutableData 속성] : 인식 할 수없는 선택기를 인스턴스로 보냈습니다.

내가 뭘 잘못 했니? 그것을 고치는 방법?

편집 : 이 내가 NSUserDefaults에 사용하는 코드입니다 :

- (Settings *) readData 
{ 
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *dataRepresentingSettings = [currentDefaults objectForKey:@"data"]; 

    if (dataRepresentingSettings != nil) { 
      return (MainClass *)[NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSettings]; 
    } 

    return nil; 
} 

- (void) saveData 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self] forKey:@"data"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
+2

언제든지 nsuserdefaults를 저장 /로드/사용하는 코드를 추가 할 수 있습니까? 함수를 잘못 호출 한 것처럼 보이지만 코드가없는 코드는 어디서나 말할 수 없습니다. –

+0

'NSUserDefaults'에 접근하는 곳에 관련 코드를 게시하십시오. –

답변

1

있다 두 가지 옵션 :

(1) 당신은 사용자 defualts에서 가져온 개체를 유지 아닙니다. NSUserDefaults에서 개체를 가져 오면 자동으로 재생됩니다. 계속 유지하려면 retain이어야합니다.

(2) 보관을 잊어 버렸습니다. 당신은 당신의 객체를 보관하는 NSKeyedArchiver을 사용하지만,에 object 것을 잊지 마십시오 :

당신이 할 수도 뭔가

Object *object = [defaults objectForKey:@"object"]; 

대신

NSData *data = [defaults objectForKey:@"object"]; 
Object *object = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

NB

등을 보관하지 않았다 내 예제는 여전히 자동으로 릴리즈됩니다. 계속 유지하려면 유지해야합니다.)

관련 문제