UITableView NSFetchedResultsController原理
我使用UITableView NSFetchedResultsController原理,uitableview,nsfetchedresultscontroller,uianimation,Uitableview,Nsfetchedresultscontroller,Uianimation,我使用NSFetchedResultsController作为NSManagedObjects的容器,在UITableView中显示CoreData中的数据。删除行的代码运行良好,但我的实现让我觉得不够优雅。有更好的办法吗 下面的代码说明了删除事件: - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(N
NSFetchedResultsController
作为NSManagedObjects
的容器,在UITableView
中显示CoreData
中的数据。删除行的代码运行良好,但我的实现让我觉得不够优雅。有更好的办法吗
下面的代码说明了删除事件:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
[myContext deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]];
if (![myContext save:&error]) {
// Error handling
}
fetchedResultsController = nil;
if (![[self getFetchedResultController] performFetch:&error]) {
// Error handling
}
[tableView reloadData];
}
}
我将fetchedResultsController
设置为nil
,并执行另一次提取以更新新内容
我所关心的是,我在各种论坛上看到了一些参考文献,它们暗示上下文中的更改会自动导致fetchedResultsController中的更改,也许第二次获取是不必要的。目前我还没有实现这些部分
另一个问题是代码只是使行消失而没有任何动画
是否可以引入一些流畅的动画?研究如何使用来管理对表和数据库的更改。这样,每当您在NSFetchedResultsController的NSManagedObjectContext中执行保存时,托管OJBEC上下文将通知该fetchedResultsController。然后fetchedResultsCotnroller将调用其委托方法
您希望实现controllerWillChangeContent:和controllerDidChangeContent:以便将其他委托方法的调用与表视图的beginUpdates和endUpdates方法的调用放在一起。(请参阅参考中的示例。)这可以防止表视图与fetchedResultsController失去同步。
然后删除以下行:
fetchedResultsController = nil;
if (![[self getFetchedResultController] performFetch:&error]) {
// Error handling
}
[tableView reloadData];
完成此操作后,您可以在单元格的插入和删除中引入动画。此外-是否可以在本论坛上收到回复的电子邮件通知?感谢您的回复-我肯定需要在这个问题上做更多的作业-我将从您的参考开始。您列出的委托方法在我的程序中,但当前没有被调用,所以我觉得一定是出了什么问题。我以为我已经执行了协议,但有些事情出了问题。我会给它更多的思考和研究。事实上,在苹果的项目中有一个很好的例子——CoreData图书——它做了我想做的事情——但它不使用故事板。因此,我正在尝试将其转换到新环境中。请确保将fetchedResultsController的委托设置为包含委托方法的控制器。Jim-你成功了-谢谢!我确实声明了委托-但在我实际分配fetchedResultsController之前。啊!但你的暗示告诉我我犯了愚蠢的错误。总有一天我会请你喝一杯的。谢谢。检查一下答案。这对我很有用。祝你好运