Jea*_*uys 5 cocoa-touch core-data uitableview nsfetchedresultscontroller
当我以编程方式更改某些现有的托管对象属性时,我的表视图无法更新.我希望NSFetchedResultsControllerDelegate在这种情况下我会被召唤,但事实并非如此.
Apple doc说:
NSFetchedResultsController此协议中使用方法的一个实例,用于通知其委托控制器的提取结果由于添加,删除,移动或更新操作而已更改.
更详细地说,我的托管对象作为一个名为int的属性status从一个中获取值enum.我的表视图只显示那些status等于upToDate(枚举值之一)的对象.为此,我的FetchedResultController有一个谓词来测试该状态:
predicate = [NSPredicate predicateWithFormat:@"doc.status == %d", upToDate];
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是当我将过时的对象更改回状态时,不会反映更新upToDate.我的代码是从Apple的模板修改的.
这是我尝试过的:
myObject.status = [NSNumber numberWithInt:upToDate];
[managedObjectContext save:nil];
[managedObjectContext processPendingChanges];
[myTableView reloadData];
Run Code Online (Sandbox Code Playgroud)
最后,我设法让我的表视图更新,并调用:
[fetchedResultsController performFetch:&error];
[myTableView reloadData];
Run Code Online (Sandbox Code Playgroud)
但即使在那时,我的NSFetchedResultsControllerDelegate方法都没有被调用,与Apple的文档相矛盾.此外,没有平滑的动画发生.
我期待controllerWillChangeContent:,controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:并且controllerDidChangeContent:被称为.
我想我错过了一些东西,可能是显而易见的东西,但我看不清楚.performFetch:每次某些托管对象可能发生变化时是否需要调用?什么时候NSFetchedResultsControllerD 真的称它为代表?
谢谢.
如果无论更改类型如何,FRC 委托方法都不会被调用,那么最可能的解释是委托配置不正确。其原因可能是:
NSFetchedResultsControllerDelegate协议。我建议捕获保存操作的错误返回,以确保保存没有发生任何事情。
其上下文的任何更改都应通知 FRC,无论这些更改是否已保存。FRC 随后应通知其代表。
| 归档时间: |
|
| 查看次数: |
824 次 |
| 最近记录: |