关系不更新的NSFetchedResultsController

比方说,我有两个实体,员工和部门。 一个部门与员工有多对多的关系,许多员工可能在每个部门,但每个员工只属于一个部门。 我想使用NSFetchedResultsController来显示所有员工在一个tableview中按照他们所属部门的属性sorting的数据。 问题是,我希望我的表更新部门对象收到更改时,就像它的职员的常规属性更改,但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进行sorting:

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

这个工作很好,第一次被调用的时候正确地对员工进行sorting,问题是当我改变一个部门的某些属性时,应该改变我的员工表的sorting。 有什么好办法让我的员工FRC跟踪关系的变化? 特别是我只是需要一些方法来更新sorting时,sorting是基于相关的属性。 我已经看了一些类似的问题,但无法find一个令人满意的解决scheme。

NSFetchedResultsController实际上只是devise为一次观察一个实体。 你的设置,虽然有意义,但它超出了NSFetchedResultsController目前能够独立观看的。

我的build议是build立你自己的守望者。 你可以将它build立在我在GitHub上设置的ZSContextWatcher 上,或者你可以使它更加简单。

基本上你想看NSManagedObjectContextDidSaveNotification张贴,然后重新加载你的表时,包含您的部门实体触发。

我也build议向苹果提交一份rdar ,并要求改进NSFetchedResultsController 。