我想知道 NSFetchedResultsChangeUpdate
方法中的 NSFetchedResultsChangeUpdate
更改类型何时通过?
我用非零 sectionNameKeyPath
创建了 NSFetchedResultsController
,并且获取了 sortDescriptor
的获取请求 . 添加了几个与获取的请求谓词匹配的对象 . 然后我尝试了更改sort属性和其中一个对象的 sectionNameKeyPath
属性 . 实际上它工作正常:更改对象在tableView周围移动,但每次我收到 NSFetchedResultsChangeMove
更改类型!更改该对象的其他道具(不用于排序或部分)根本不会触发 controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
!
我对 NSFetchedResultsChangeUpdate
感兴趣的原因是我希望 NSFetchedResultsController
在已经获取的对象的某些属性在与 NSFetchedResultsController.fetchRequest.predicate
匹配的边界中发生更改时通知我 . 例如,谓词将某个实体的对象与 prop == 1 OR prop == 2
匹配 . 但我也希望在其中一个匹配对象将其 prop
值从1更改为2时收到通知 .
只是不想创建两个 NSFetchedResultsController
,因为我相信有更优雅的方式 . NSFetchedResultsChangeUpdate
改变类型是我唯一尚未发现的关于 NSFetchedResultsController
的谜 - 从未捕获过它 .
1 回答
当我创建第二个托管对象上下文,使用相同的持久存储,编辑对象的值,然后将上下文保存到持久性存储中时,我收到此
type
值 .(如果我更改了它的名称,我会得到
ChangeMove
值,如你所说 . )anObject
=NSManagedObject
相关更改对象的子类indexPath
=相关指数newIndexPath
=nil
(我创建第二个上下文的原因是针对各种用例;一个案例:“new foo object”,用户小提琴创建各种拥有的关系,然后点击取消,我只是删除上下文,不需要撤消管理)