gpt4 book ai didi

objective-c - 关系不更新的 NSFetchedResultsController

转载 作者:太空狗 更新时间:2023-10-30 03:15:00 25 4
gpt4 key购买 nike

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

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

/* Make Changes to department object */

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

这显然不理想,但它确实会导致调用基于员工的 FRC 委托(delegate)方法 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 发布,然后在包含您的部门实体的火灾发生时重新加载您的表。

我还建议提交 rdar与 Apple 合作并要求改进 NSFetchedResultsController

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com