Какао: обновить NSObjectController после разархивирования данных с диска - PullRequest
0 голосов
/ 02 ноября 2009

У меня есть объект, связанный с пользовательским интерфейсом с помощью NSObjectController.Я могу заархивировать объект и разархивировать его позже.Это работает отлично до сих пор.В отладчике я вижу, что объект содержит данные, которые я сохранил в предыдущем сеансе.Остается проблема: пользовательский интерфейс не обновляется.Я думаю, я должен сказать NSObjectController, как он должен иметь дело с другим объектом.Но я не знаю как.Я попытался newObject, но это не сработало вообще.

В данный момент мой код выглядит следующим образом:

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

    // [myCharacterController DoSomething] ???
}

rpgCharacter должен быть объектом для myCharacterController.

1 Ответ

1 голос
/ 02 ноября 2009

Что вы делаете, это устанавливаете 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]];

}
...