核心数据/NSFetchedResultsController - 注册更改 objects 与获取的 object 相关

Core Data / NSFetchedResultsController - Registering changed objects related to the fetched object

我使用 NSFetchedResultsController 获取显示在 UITableView 中的 object 列表。如果我更改 object 中的值,整个事件都会触发并自动重新加载更改的行。但是显示的值之一来自相关的 objects(one-to 很多关系)。那些 object 有一个临时标题(因此它的值再次来自另一个 object)。当此标题更改时,不会重新加载行。

问题:任何人都可以提出一个干净的解决方案吗?

可能的肮脏解决方案: 我可以在 class 中创建一个瞬态 属性,它通过 "fake" setter 方法,因此 NSFetchedResultsController 将看到更改并触发重新加载。但在我看来那很脏。

提前致谢!

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"];
    }
}