Core Data / NSFetchedResultsController - 注册与获取的对象相关的更改对象

Posted

技术标签:

【中文标题】Core Data / NSFetchedResultsController - 注册与获取的对象相关的更改对象【英文标题】:Core Data / NSFetchedResultsController - Registering changed objects related to the fetched object 【发布时间】:2016-09-30 13:37:06 【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Core Data / NSFetchedResultsController - 注册与获取的对象相关的更改对象的主要内容,如果未能解决你的问题,请参考以下文章

RestKit / Core Data:远程删除的实体不会从 Core Data 中删除

Plain Core Data vs Core Data + Magical Record

RESTkit,Core Data:在将对象传输到 Core Data 之前对其进行处理

.net core 基于Dapper 的分库分表开源框架(core-data)

EF6 System.Data.Entity.Core.EntityKey 在 Entity Framework Core 中的等价物是啥?

.net core 基于Dapper 的分库分表开源框架(core-data)