1

我使用NSFetchedResultsController来获取UITableView中显示的对象列表。如果我更改对象中的值,则会触发整个事件并自动重新加载更改的行。但其中一个显示值来自相关对象(一对多关系)。这些对象有一个暂时的标题(所以它的值再次来自另一个对象)。当这个标题改变时,行不会被重新加载。核心数据/ NSFetchedResultsController - 注册与读取对象相关的已更改对象

问题:有人可以建议一个干净的解决方案呢?

可能肮脏的解决方案:我可以创造而它与“假”的setter方法获取的类短暂性质,所以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"]; 
    } 
} 
相关问题