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 中的等价物是啥?