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/

相关文章:

ios - 无法使用 SQL 等条件获取核心数据

iphone - 核心数据 : The fetched object at index x has an out of order section name 'xxxxxx. 对象必须按节名排序

objective-c - UIDocumentInteractionController 将无法在 Ibook 中打开文档

ios - 在 iOS5 中,当我点击 map 时,它第一次崩溃?

iphone - 在 ios wifi 网络上查找对等点

ios - 如何删除 CoreData 中的重复条目?

ios - 制作自定义文本字段

objective-c - 我可以将刚刚插入的 ManagedObject 分配给 self 吗?

ios - 如何在持久存储更改后刷新 fetchedResultsController

ios - 如何在删除多行时实现 NSFetchedResultsController 委托(delegate)?