2012-09-29 2 views
2

나는 모든 변경 사항이 NSUserDefaults (물론 KVO compilant 부분에만 저장 됨)에 즉시 저장되고 해당 유형의 객체가 인스턴스화 될 때마다 자동으로로드되는 기본 클래스를 작성합니다 (실제로 기본적이고 재사용 가능한 사용자 데이터 저장소).NSObject의 모든 속성을 (KVO) 관찰 할 수 있습니까?

"키 목록"(이 개체의 모든 하위 클래스에 상수와 같은)을 제공 할 의사가 없으므로 개체의 모든 속성을 자동으로 관찰 할 수 있기를 바랍니다.

아이디어가 있습니까? 물론 공용 API 만 있으면됩니다.

+0

그 이유를 제가했습니다 생각하게 처음에 필요하거나 도움이 될 것입니다 서브 클래스에 키의 목록을 제공함으로써 조금 혼란 스러워요 어쩌면 당신의 질문을 오해했을 수도 있습니다. 내 이해는이 클래스와 그 자손의 모든 인스턴스가 plist에서 쓰거나 읽는 것을 원한다는 것이다. 그러나 슈퍼 클래스가 모든 관찰 및 쓰기/읽기를 처리하고 서브 클래스가 고유 한 키 집합을 제공하여 수퍼 클래스 구현이 모든 관련 키를 관찰 할 수있는 것처럼 보입니다. 내가 놓친 게 있니? –

답변

0

개체에 대한 속성 집합이있는 경우 개체를 NSUserDefaults의 사전에 저장할 수 있습니다. 각 속성에게 당신이 사용하는 각 속성에 대한 사용자 정의 setter 메소드를 생성 할 수 있습니다 설정되어있는 모든 시간을 절약하기 위해 :

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     if ([defaults objectForKey:@"yourKey"] == nil) { 

      NSDictionary *dict = [NSDictionary dictionaryWithObject:@"yourObject" forKey:@"keyForYourObject"]; 
      // Add stuff to the dictionary 
      [defaults setObject:dict forKey:@"yourKey"]; 
     }else{ 
      NSDictionary *dict = [defaults objectForKey:@"yourKey"]; 
      // Add stuff to the dictionary 
      [defaults setObject:dict forKey:@"yourKey"]; 
     } 

이렇게하면 모든 속성과 UserDefaults에 저장 한 사전을 제공 할 것입니다. 키가의 standart 방법을 사용의 다음 목록을 얻을 수 있습니다 :

NSDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"yourKey"]; 
NSArray *keys = [dict allKeys]; 
+0

소리가 너무 자동적이지 않습니다. :) – Geri

+0

그건 그렇고, 내가 관찰 할 속성 plist 파일을 사용하여 루트 클래스를 만들었습니다. 매력처럼 작동합니다. 이제는이 객체 서브 클래스가 자동으로 저장되고 미리 정의 된 기본값으로 인스턴스화됩니다. – Geri

+0

왜 자동으로 들리지 않습니까? 이 클래스 또는 하위 클래스에서 해당 속성을 설정할 때마다 자동으로 저장되고 키를 가져 오는 것은 두 줄의 코드입니다. 속성을 설정하려면 plist 파일을 거의 동일한 방식으로 변경해야합니다. 또는 어쩌면 내가 조금 당신의 요구 사항을 오해하고있어 :) 어쨌든, 좋은 당신이 당신의 문제를 해결 듣고 :) –