Какао:Обновите NSObjectController после разархивирования данных с диска.

StackOverflow https://stackoverflow.com/questions/1660215

  •  11-09-2019
  •  | 
  •  

Вопрос

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

На данный момент мой код выглядит так:

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

    // [myCharacterController DoSomething] ???
}

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

Это было полезно?

Решение

Что вы делаете, так это устанавливаете iVar rpgCharacter напрямую.Чтобы запустить 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]];

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top