iphone - NSFetchedResultsChangeUpdate 更改类型何时发生?

标签 iphone ios core-data nsfetchedresultscontroller

我想知道 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/

相关文章:

ios - 在 Windows Intel XDK 中编辑 iOS .plist 文件

iphone - CoreData 插入还是替换?

iphone - 保存上下文中的 CoreData 错误,NSPersistentStoreCoordinator 没有持久存储

ios - Storyboard 和每个 Controller 中的数据保留(Swift)

ios - Swift 支持继承类型

ios - 使用 OCMock 对复杂方法进行单元测试

objective-c - 保留并重新排列核心数据记录的顺序

ios - 在事件发生后访问另一个 View Controller 的属性

ios - iOS8 问题中 UIControlStateHighlighted 的 UIButton textColor

iphone - 视网膜中的ClipToMask