Цель C - Основные данные и NSFetchedResultController? - PullRequest
1 голос
/ 25 октября 2011

Итак, у меня есть выбранный контроллер результатов, который возвращает список объектов.Я пытаюсь обнаружить любые изменения в объекте, включая изменения в подобъектах

Объект имеет эти свойства (NSString myString, NSSNumber myNumber, Object2 myObject2)

, поэтому любые изменения в myString и myNumber вызовут FetchedResultControllerуведомить делегата.Но изменение свойств myObject2 не приведет к тому, что fetchedResultController вызовет делегат.

Я что-то не так делаю?Должен ли я вручную сообщить myObject, что он должен уведомить fetchedResultController?

Ответы [ 2 ]

0 голосов
/ 25 октября 2011

Итак, вот ответ:

реализует следующие методы в дочернем классе (myObject2), и о каждом изменении keyValue уведомляет класс владельца

- (void)willChangeValueForKey:(NSString *)key
{
   [super willChangeValueForKey:key];
   [self.myMainObject willChangeValueForKey:@"myObject2"];
}

- (void)didChangeValueForKey:(NSString *)key
{
   [super didChangeValueForKey:key];
   [self.myMainObject didChangeValueForKey:@"myObject2"];
}
0 голосов
/ 25 октября 2011

Когда вы «изменяете» myString и ваш NSFetchedResultsController (NSFRC) отвечает своим событием, вам необходимо осознать, что на самом деле происходит.

NSFRC использует наблюдение значения ключа, чтобы увидеть ваши изменения.Теперь предположим, что yourObj является вашим объектом, который вы упомянули выше, и поэтому при вводе: yourObj.myString = @"New String" или [yourObj setMyString:@"New String"] любые получатели, наблюдающие это свойство (ваш NSFRC!), Будут уведомлены, потому что сеттер вызывается для вашего объекта..

Таким образом, вы не получаете уведомления о вашем «подобъекте», как вы его называли, потому что вы не получаете доступ к свойству, наблюдаемому NSFRC, скорее к свойству вашего подобъекта.

Чтобы вызвать уведомление о вашем подчиненном объекте, вам необходимо вызвать установщик вспомогательного объекта для вашего объекта.(т.е. [myObj setObject2:obj2])

...