2009-11-02 61 views
0

我有一個用NSObjectController綁定到用戶界面的對象。我可以將對象存檔並稍後解除存檔。迄今爲止,這工作得很好。在調試器中,我可以看到對象保存了我在前一個會話中保存的數據。剩下的問題是:用戶界面不刷新。我想我必須告訴NSObjectController他不得不處理另一個對象。但我不知道如何。我試過newObject,但根本沒有工作。Cocoa:解壓後刷新NSObjectController從磁盤中獲取數據

目前我的代碼看起來是這樣的:

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

    // [myCharacterController DoSomething] ??? 
} 

rpgCharacter應該是myCharacterController的對象。

回答

1

你正在做的是直接設置rpgCharacter iVar。爲了觸發KVO你需要這樣做以不同的方式:直接,如果你正在使用KVC

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

} 

,或者和有:

,如果您使用的Objective-C 2.0和屬性語法正確命名二傳手:

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

} 
+0

工作正常。謝謝。所以我需要通過屬性或訪問器方法來設置對象來觸發KVO?是的,現在對我來說非常有意義。 – TalkingCode 2009-11-02 18:08:06

+0

是的。除了應直接設置它們的初始化方法外http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/ObjectiveC/Articles/ocAllocInit.html#//apple_ref/doc/uid/TP30001163-CH22- SW1 – Abizern 2009-11-02 18:10:31