1

Я использую NSFetchedResultsController, чтобы получить список объектов, который отображается в UITableView. Если я изменяю значения в объектах, все это запускает и автоматически перезагружает измененные строки. Но одно из отображаемых значений происходит от связанных объектов (отношения «один-много»). Эти объекты имеют переходный заголовок (так что это значение возвращается снова от другого объекта). Когда этот заголовок изменяется, строки не перезагружаются.Основные данные/NSFetchedResultsController - Регистрация измененных объектов, связанных с извлеченным объектом

Вопрос: Может ли кто-нибудь предложить чистое решение?

Возможные Грязное Решение: я мог бы создать переходное свойство в классе, который получает извлекаться с «фальшивым» инкубационным методом, поэтому NSFetchedResultsController будет видеть изменения и запустить перезагрузку. Но это очень грязно, на мой взгляд.

Заранее благодарен!

ответ

2

FRC отслеживает изменения свойств объектов одного конкретного объекта. Поэтому изменения в объектах связанного объекта не отслеживаются. Но вы можете использовать KVO, чтобы вызвать реакцию FRC.

[Department].employees <->> [Employee].department 

В Employee.m:

- (void)setTitle:(NSString *)title 
{ 
    [self willChangeValueForKey:@"title"]; 
    [self setPrimitiveValue:title forKey:@"title"]; 
    [self didChangeValueForKey:@"title"]; 

    [self.department willChangeValueForKey:@"employees"]; 
    [self.department didChangeValueForKey:@"employees"]; 
} 

Или что-то вроде этого (не проверял это сам, хотя):

- (void)didChangeValueForKey:(NSString *)key 
{ 
    [super didChangeValueForKey:key]; 

    if (self.department && [key isEqualToString:@"title"]) { 
     [self.department willChangeValueForKey:@"employees"]; 
     [self.department didChangeValueForKey:@"employees"]; 
    } 
} 
Смежные вопросы