2009-11-02 2 views
0

NSObjectController를 사용하여 사용자 인터페이스에 바인딩 된 객체가 있습니다. 개체를 보관하고 나중에 보관 취소 할 수 있습니다. 지금까지 잘 작동합니다. 디버거에서 객체가 이전 세션에서 저장 한 데이터를 보유하고 있음을 알 수 있습니다. 나머지 문제는 다음과 같습니다. 사용자 인터페이스가 새로 고쳐지지 않습니다. 나는 NSObjectController에게 그가 어떻게 다른 객체를 다루어야하는지 말해야한다고 생각합니다. 하지만 어떻게해야할지 모르겠다. newObject를 시도했지만 전혀 작동하지 않았습니다. 순간코코아 : 디스크에서 데이터를 언 아카이빙 한 후 NSObjectController를 새로 고침

내 코드는 다음과 같습니다

if ([aOpenPanel runModal] == NSOKButton) 
{ 
    NSString *filename = [aOpenPanel filename]; 
    rpgCharacter = [NSKeyedUnarchiver unarchiveObjectWithFile:filename]; 

    // [myCharacterController DoSomething] ??? 
} 

rpgCharacter가 myCharacterController에 대한 개체 수 있어야합니다.

답변

1

당신이하고있는 일은 rpgCharacter iVar를 직접 설정하는 것입니다. 직접

if ([aOpenPanel runModal] == NSOKButton) 
{ 
    NSString *filename = [aOpenPanel filename]; 
    self.rpgCharacter = [NSKeyedUnarchiver unarchiveObjectWithFile:filename]; 

} 

또는, 당신은 KVC를 사용하는 경우와이 : 당신은 오브젝티브 C 2.0 및 속성 구문을 사용하는 경우

: KVO를 트리거하기 위해 당신도 다른 방법으로이 작업을 수행 할 필요가 올바르게 명명 된 setter :

if ([aOpenPanel runModal] == NSOKButton) 
{ 
    NSString *filename = [aOpenPanel filename]; 
    [self setRpgCharacter:[NSKeyedUnarchiver unarchiveObjectWithFile:filename]]; 

} 
+0

잘 작동합니다. 감사. 그래서 KVO를 트리거하기 위해 속성이나 접근 자 메소드를 통해 객체를 설정해야합니까? 네, 지금 제게 완벽하게 이해합니다. – TalkingCode

+0

예. 직접 설정해야하는 초기화 메소드를 제외하고 http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/ObjectiveC/Articles/ocAllocInit.html#//apple_ref/doc/uid/TP30001163-CH22- SW1 – Abizern