我正在使用Magical Record进行核心数据操作。在表视图控制器中,我设置了NSFetchResultsController,如下所示:
self.fetchedResultsController = [Activity MR_fetchAllGroupedBy:nil withPredicate:predicateForSmart sortedBy:@"activityScore" ascending:NO delegate:self];
我还在控制器中为NSFetchResultsController编写了委托方法。
现在我使用
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
if (activitiesWithThisID.count > 0) {
Activity *activityToUpdate = [[activitiesWithThisID firstObject] MR_inContext:localContext];
// Detailed update here
activityToUpdate.someProperty = ...;
...
}
} completion:^(BOOL contextDidSave, NSError *error) {
更新数据,方法
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath
被解雇了。但是,NSFetchedResultsChangeType
始终是NSFetchedResultsChangeDelete
,我希望它应该是NSFetchedResultsChangeUpdate
。当我使用[activityToUpdate deleteEntity]
时,仍会NSFetchedResultsChangeDelete
被解雇,但它是正确的。
答案 0 :(得分:0)
错误修复了。我使用NSPredict
查找数据然后更新条目。但是,之前此查找操作位于另一个NSManagedObjectContext
中。但是,NSFetchedResultsController
存在问题。该错误最终是在内存评估谓词期间(查看新插入的对象是否属于控制器),谓词最终进行指针比较。由于存在两个托管对象上下文,因此指针比较将失败。因此控制器最终认为新对象不是结果集的一部分。
所以只需将所有内容放在相同的“NSManagedObjectContext”中即可。