假设我有两个实体,EmployeeDepartment.一个部门与一个员工有一对多的关系,每个部门可以有多个员工,但每个员工只属于一个部门.我希望使用ANNSFetchedResultsController在表视图中显示所有员工,该表视图按数据排序,该数据是员工所属部门的属性.问题是,我希望我的表在部门对象接收更改时更新,就像在Employee的常规属性更改时一样,但是NSFetchedResultsController似乎不跟踪相关对象.我通过以下操作部分通过了这个问题:

for (Employee* employee in department.employees) {
    [employee willChangeValueForKey:@"dept"];
}

/* Make Changes to department object */

for (Employee* employee in department.employees) {
    [employee didChangeValueForKey:@"dept"];
}

这显然不理想,但它确实会导致调用基于Employee的FRC委托方法didChangeObject.我现在留下的真正问题是对跟踪Employee对象的FRC进行排序:

NSEntityDescription *employee = [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:self.managedObjectContext];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"department.someProperty" ascending:NO];

这非常有效,并且在第一次调用时就正确地对员工进行了排序,问题是,当我更改某个部门的某些属性时,如果该属性应该更改EMPLOYEE表的排序,则没有任何react .有没有什么好方法可以让我的员工FRC跟踪一段关系中的变化?特别是,当排序基于相关属性时,我只需要一些方法来让它更新排序.我看过一些类似的问题,但没有找到令人满意的解决方案.

推荐答案

NSFetchedResultsController只被设计成一次只能观看一个实体.您的设置,虽然有意义,但它有点超出了NSFetchedResultsController目前能够独立观看的范围.

我的建议是建立自己的观察者.你可以基于我在GitHub上设置的ZSContextWatcher,或者你可以让它更简单.

基本上,您希望查看NSManagedObjectContextDidSaveNotification条帖子,然后在一次包含部门实体的火灾发生时重新加载表.

我还建议向苹果公司提交一份rdar号文件,并要求对NSFetchedResultsController号进行改进.

Database相关问答推荐

如何避免在模式更改时重新同步微服务数据库之间的整个表?

如何限制报表中返回的行数?

当某些 node 死亡时,mongo 副本集选举如何表现?

如何在没有sqlmock的情况下模拟db ping

Spring Data JPA 对 SQL 注入安全吗

Phonegap如何在android上保存永久数据

sql-dump 有什么用?

哪个本地数据库适合 Windows 8 应用store 应用?

存储过程的缺点

区分大小写的数据库有什么好处吗?

如何最好地在 MS SQL Server 中复制整个数据库?

无法在 MYSQL 5.5 w/MYSQL Workbench 中更改模式名称

用于获取存储在单个表中的 n 级父子关系的 Postgresql 查询

将 Android Room 数据库与 Firebase 实时数据库相关联

SQLite3 不支持外键约束吗?

如何使用 PHP 代码将图像上传到 MySQL 数据库

数据库与微服务的一致性

如何在实体框架中使用字符串属性作为主键

使用 Django 的复合/复合主/唯一键

SqlParameterCollection only accepts non-null SqlParameter type objects, not String objects