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 を直接使用していて、正しい名前のセッターがある場合:

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

}
于 2009-11-02T13:28:51.837 に答える