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之前。啊!但你的暗示告诉我我犯了愚蠢的错误。总有一天我会请你喝一杯的。谢谢。检查一下答案。这对我很有用。祝你好运