Я пытаюсь реализовать наблюдение за безопасным ключевым ключом по ключевым путям. Предположим, что у меня есть объект модели данных с именем person
, у которого есть свойство workplace
. workplace
в свою очередь имеет свойство address
, которое я хочу наблюдать, поэтому я настраиваю наблюдение за ключевым значением со следующим вызовом:
[person addObserver:theObserver
forKeyPath:@"workplace.address"
options:NSKeyValueObservingOptionNew
context:NULL];
Это отлично работает, пока человек не изменит рабочее место. Как только это произойдет:
person.workplace = newWorkplace;
система KVC автоматически сбрасывает приложение, заявив, что "oldAddress был освобожден, пока наблюдатели с ключевыми значениями все еще были зарегистрированы с ним". (oldAddress - адрес предыдущего рабочего места).
К сожалению, я не могу настроить реализацию класса объекта "person", чтобы уведомить наблюдателя о том, что рабочее место уйдет. Есть ли какой-либо шаблон, чтобы избежать такого рода сбоев? Может быть, можно получить другие уведомления? Как проходит ключевой путь в случае KVC и у вас есть доступ к этой цепочке?