我想知道 NSFetchedResultsChangeUpdate 更改类型在 controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: 方法中是什么时候传递的?
我已经使用非零 sectionNameKeyPath 创建了 NSFetchedResultsController 并获取了具有 sortDescriptor 的请求。添加了几个与获取的请求谓词匹配的对象。然后我尝试了更改其中一个对象的排序属性和 sectionNameKeyPath 属性。实际上它工作正常:更改对象在 tableView 周围移动,但每次我收到 NSFetchedResultsChangeMove 更改类型!更改该对象的其他 Prop (不用于排序或部分)根本不会触发 controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:!
我之所以对 NSFetchedResultsChangeUpdate 感兴趣,是因为我希望 NSFetchedResultsController 在已获取对象的某些属性在匹配 NSFetchedResultsController 的范围内发生变化时通知我。 fetchRequest.predicate.例如,谓词匹配具有prop == 1 OR prop == 2 的某个实体的对象。但我也想在其中一个匹配对象将其 prop 值从 1 更改为 2 时收到通知。
只是不想创建两个 NSFetchedResultsController,因为我相信有更优雅的方法。 + NSFetchedResultsChangeUpdate 更改类型是我对 NSFetchedResultsController 唯一未解的谜团 - 从未发现它。
最佳答案
我在创建第二个托管对象上下文时收到此 type 值,使用相同的持久存储,编辑对象的值,然后将上下文保存到持久存储中。
(如果我更改它排序的名称,我会得到 ChangeMove 值,如您所述。)
- (void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
…
case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath]
inTable:tableView
atIndexPath:indexPath];
break;
…
anObject = NSManagedObject 相关更改对象的子类
indexPath = 相关索引
newIndexPath = 无
(我创建第二个上下文的原因是为了各种用例;一个案例:“新 foo 对象”,用户摆弄创建各种拥有的关系,然后点击取消,我只是丢弃上下文,没有撤消管理需要)
关于iphone - NSFetchedResultsChangeUpdate 更改类型何时发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6168150/