Cocoa:从磁盘取消归档数据后刷新NSObjectController

时间:2009-11-02 09:24:54

标签: cocoa cocoa-bindings

我有一个使用NSObjectController绑定到用户界面的Object。我能够归档Object并在以后解压缩它。这到目前为止工作正常。在调试器中,我可以看到该对象包含我在前一个会话中保存的数据。剩下的问题是:用户界面不刷新。我想我必须以某种方式告诉NSObjectController他必须处理另一个对象。但我不知道怎么做。我尝试过newObject,但根本没用。

目前我的代码看起来像这样:

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

    // [myCharacterController DoSomething] ???
}

rpgCharacter应该是myCharacterController的对象。

1 个答案:

答案 0 :(得分:1)

您正在做的是直接设置rpgCharacter iVar。为了触发KVO,您需要以不同的方式执行此操作:

如果您使用的是Objective-C 2.0和属性语法:

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

}

或者,如果您直接使用KVC并且具有正确命名的setter:

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

}