objective-c - NSFetchedResultsController,关系未更新

标签 objective-c core-data nsfetchedresultscontroller

假设我有两个实体,员工和部门。一个部门与员工有一对多的关系,每个部门可以有很多员工,但是每个员工只能属于一个部门。我想使用NSFetchedResultsController在表视图中按数据排序显示所有雇员,该数据是他们所属部门的属性。问题是我希望我的表在部门对象收到更改时更新,就像雇员的常规属性更改时一样,但是FetchedResultsController似乎不跟踪相关对象。通过执行以下操作,我已部分解决了此问题:

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

/* Make Changes to department object */

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


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

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


这很好用,并且在第一次调用雇员时可以正确地对雇员进行排序,问题是当我对部门进行更改时,应该更改应更改雇员表排序的某些属性。有什么好方法可以让我的员工FRC跟踪关系中的变化?特别是当排序基于相关属性时,我只需要某种方法来更新排序。我已经看过类似的问题,但找不到令人满意的解决方案。

最佳答案

NSFetchedResultsController实际上仅设计为一次监视一个实体。您的设置虽然有意义,但超出了NSFetchedResultsController当前可以自己观看的范围。

我的建议是设置自己的观察者。您可以基于我在GitHub上设置的ZSContextWatcher进行设置,也可以使其更加简单。

基本上,您希望监视NSManagedObjectContextDidSaveNotification帖子,然后在包含部门实体的事件触发时重新加载表格。

我还建议向Apple提交rdar并要求改进NSFetchedResultsController

关于objective-c - NSFetchedResultsController,关系未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35632070/

相关文章:

iphone - 使用 iCloud 时应用程序在 addPersistentStoreWithType 上停止

iphone - NSFetchRequest,查询多个属性?

ios - 使用 URL 启动应用程序,但未调用 OpenUrl

ios - 为什么 ViewController 的初始方向不是横向的,而应该是横向的?

objective-c - 序列化/存储 UIView 及其 subview

iphone - 如何从核心数据中获取唯一字段值(song_type)

iphone - 在 NSFetchedResultsController 中设置 NSSortDescriptor 键的问题

ios - NSFetchedResultsController W/自定义表格单元格不兼容指针

objective-c - 如何在 objective-c 的typedef枚举中添加新的枚举?

iphone - UIWebView背景设置为Clear Color,但不透明