草庐IT

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

coder 2024-01-27 原文

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

有关iphone - NSFetchedResultsChangeUpdate 更改类型何时发生?的更多相关文章

随机推荐