Какао:Обновите NSObjectController после разархивирования данных с диска.
-
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]];
}