删除子视图中的核心数据后更新表视图

Posted

技术标签:

【中文标题】删除子视图中的核心数据后更新表视图【英文标题】:Update table view after delete core data in child view 【发布时间】:2013-05-16 09:17:14 【问题描述】:

在使用核心数据删除 DetailView 控制器中的项目后,我需要使用 UITableView 更新 MainView 控制器中的表视图。

核心数据结构:http://i.stack.imgur.com/GZ0k8.png

在 MainView 控制器中,我有一个带有订单的表格,按下订单将打开一个带有食物和订单的 detailview 控制器,我可以在其中删除订单。之后我需要[self popViewControllerAnimated:YES];

删除对象的代码,其中 self.orderItem - 订单传递给 DetailView 控制器:

[self.managedObjectContext deleteObject:self.orderItem];
        NSError *error = nil;
        if (![self.managedObjectContext save:&error]) 
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        

【问题讨论】:

在重建你的datasource之前只需调用[table reloadData] 我在 MainView 的 viewDidAppear 中调用 reloadData,但行没有被删除,它们只是空 你在numberofrowsinsection 中写了什么你不回[datasource count] 吗? 我有,主要问题是我删除子控制器中的对象,我需要更新主控制器 添加为下面的答案 【参考方案1】:

最好的方法是使用 NSFetchedResultsController。它将作用于它正在获取的数据的更改,您可以更新表。这是一个很好的教程。 http://www.raywenderlich.com/999/core-data-tutorial-how-to-use-nsfetchedresultscontroller

【讨论】:

【参考方案2】:

在 mainviewController 的 viewWillAppear 中编写代码 用于重新加载表格视图

 //this controller delegate method 
- (void)viewWillAppear:(BOOL)animated

[tableview reloadData];

当你弹出主视图时,它会被调用

【讨论】:

我在 MainView 的 viewDidAppear 中调用 reloadData 在视图中调用它会出现在主视图控制器类中并放置断点检查此方法是否被调用 并更新您正在使用的数组,以显示视图中的行数,然后调用 reloadData【参考方案3】:

您应该重新创建nsfetchrequest 并从viewWillAppear 中的coredata 重新获取数据,一旦您的datasource 更新,请调用[table reloadData]

【讨论】:

以上是关于删除子视图中的核心数据后更新表视图的主要内容,如果未能解决你的问题,请参考以下文章

更新表格视图单元格中的核心数据值后如何刷新

UITableView - 核心数据应用程序中的表视图崩溃,因为删除后行数无效

如何从数据数组中删除对象(核心数据)

在 UISplitViewController 中删除详细视图中的最后一个对象时应该做啥

删除项目后如何更新列表视图?

MySql数据库之视图(定义视图查询视图更新视图视图的作用)