我有一个使用NSObjectController绑定到用户界面的Object。我能够归档Object并在以后解压缩它。这到目前为止工作正常。在调试器中,我可以看到该对象包含我在前一个会话中保存的数据。剩下的问题是:用户界面不刷新。我想我必须以某种方式告诉NSObjectController他必须处理另一个对象。但我不知道怎么做。我尝试过newObject,但根本没用。
目前我的代码看起来像这样:
if ([aOpenPanel runModal] == NSOKButton)
{
NSString *filename = [aOpenPanel filename];
rpgCharacter = [NSKeyedUnarchiver unarchiveObjectWithFile:filename];
// [myCharacterController DoSomething] ???
}
rpgCharacter应该是myCharacterController的对象。
答案 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]];
}