Core Data / NSFetchedResultsController - 注册与获取的对象

时间:2016-09-30 13:37:06

标签: ios objective-c uitableview core-data nsfetchedresultscontroller

我使用NSFetchedResultsController来获取UITableView中显示的对象列表。如果我更改对象中的值,则整个事件会触发并自动重新加载已更改的行。但其中一个显示值来自相关对象(一对多关系)。这些对象具有瞬态标题(因此它的值再次来自另一个对象)。当此标题更改时,不会重新加载行。

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

可能的脏解决方案:我可以在类中创建一个瞬态属性,该属性将使用“假”setter方法获取,因此NSFetchedResultsController将看到更改并触发重新加载。但是在我看来这很脏。

提前致谢!

1 个答案:

答案 0 :(得分:3)

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