0

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

目前我的代码如下所示:

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

    // [myCharacterController DoSomething] ???
}

rpgCharacter 应该是 myCharacterController 的对象。

4

1 回答 1

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]];

}
于 2009-11-02T13:28:51.837 回答