【问题标题】:CoreData: Fetch request does not fetch last inserted record? Or how to force refreshing a fetch requestCoreData:获取请求不获取最后插入的记录?或者如何强制刷新获取请求
【发布时间】:2014-03-04 00:27:55
【问题描述】:

我之前已经问过这个问题,但一直没有得到好的答案,所以我再次问了一遍,重新措辞,希望问题变得更清楚:

我有一个标签栏控制器 A,嵌入在导航控制器中。 第一个选项卡包含一个表格视图控制器 B,第二个选项卡包含一个带有核心图的视图控制器 C。 导航栏有一个 + 栏按钮,它以模态方式分隔视图控制器 D,用户在其中向核心数据添加新对象/记录。

table view controller D使用一个NSFetchedResultsController作为它的数据源,所以当用户从controller D返回时,新创建的对象会显示在table view中。

但是,如果用户点击第二个选项卡上的 + 栏按钮,并在模态分离视图控制器 D 中创建一个新对象/记录,然后返回到第二个选项卡,则不会更新核心绘图图。我进行了调查,发现为核心图提供数据的获取请求没有再次更新/执行。

那么,如何强制再次执行 fetch 请求?

视图控制器 D 中我的“完成”方法末尾的代码:

MRBMITabBarController *tabController = (MRBMITabBarController *) self.delegate;
NSArray *controllers = tabController.viewControllers;
MRBMIKurveViewController *kurveController = (MRBMIKurveViewController *) [controllers objectAtIndex:1];
kurveController.bmisForPlot = nil;
kurveController.bmisForPlot = [[kurveController fetchBmisForPlot] copy];
[kurveController.graph reloadData];
[kurveController.boundLinePlot reloadData];

[self.delegate dismissViewControllerAnimated:YES completion:nil];

但这不会刷新视图控制器 C 中的绘图,而是刷新表视图控制器 D 中的表视图。

注意:MRBMIKurveViewController 是视图控制器 C。

【问题讨论】:

    标签: ios core-data uiviewcontroller core-plot


    【解决方案1】:

    呼叫:

    NSError *err = nil;
    [managedObjectContext save:&err];
    

    在您更改日期之后

    在控制器的viewViewAppear 方法中调用您的重新加载数据方法

    【讨论】:

      【解决方案2】:

      终于找到了解决办法:

      MRBMITabBarController *tabController = (MRBMITabBarController *) self.delegate;
      NSArray *controllers = tabController.viewControllers;
      MRBMIKurveViewController *kurveController = (MRBMIKurveViewController *) [controllers objectAtIndex:1];
      
      kurveController.bmisForPlot = [[kurveController fetchBmisForPlot] copy];
      kurveController.dataForPlot = [kurveController testData3];
      [kurveController.boundLinePlot reloadData];
      
      [self.delegate dismissViewControllerAnimated:YES completion:nil];
      

      基本上,在关闭视图控制器 D 之前,我会调用所有方法(通过委托),这些方法涉及在视图控制器 D 的“完成”方法中为绘图创建数据

      【讨论】:

        【解决方案3】:

        为什么不在核心绘图视图 (C) 上使用单独的 fetchedResultsController 并将其用作绘图的数据源。不确定情节如何运作,因此您可能需要致电reloadData。您可能只需要实现一个 fetchedResultsController 委托方法controllerDidChangeContent 即可调用“reloadData”。

        这样你的观点就完全相互独立了,一个甚至不需要知道另一个是否存在。你的方式 D 必须知道 C 的详细信息。现在你可以有一个后台线程更新数据,你的情节将自行更新。

        【讨论】:

          猜你喜欢
          • 2011-12-18
          • 1970-01-01
          • 1970-01-01
          • 2016-08-18
          • 2014-07-03
          • 1970-01-01
          • 2020-10-26
          • 2014-04-01
          • 1970-01-01
          相关资源
          最近更新 更多