2014-03-04 81 views
0

我之前已經問過這個問題,但從來沒有得到一個很好的答案,所以我再問一遍,重新措辭,並希望問題變得更加清晰:CoreData:獲取請求不會獲取上次插入的記錄?或者如何強制刷新取回請求

我有一個選項卡條形碼控制器A,嵌入在導航控制器中。 第一個選項卡包含表格視圖控制器B,第二個選項卡包含具有核心圖的視圖控制器C. 導航欄有一個+ bar按鈕,它用於模式地縮放視圖控制器D,用戶在其中添加一個新的對象/記錄到核心數據。

表視圖控制器D使用NSFetchedResultsController作爲其數據源,因此當用戶從控制器D返回時,新創建的對象將顯示在表視圖中。

但是,如果用戶點擊第二個選項卡上的+ bar按鈕,並在模態相關的視圖控制器D中創建新的對象/記錄,然後返回到第二個選項卡,則不更新核心繪圖圖形。我調查了一下,發現爲核心繪圖提供數據的提取請求不會再次更新/執行。

那麼,我該如何強制執行取回請求呢?

我「做」方法的視圖控制器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.

回答

0

電話:

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

你做了之後更改日期

調用控制器的viewViewAppear方法你重裝數據的方法

0

最後我找到解決辦法:

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

0

爲什麼不使用單獨的fetchedResultsController之前的所有方法(通過委託)核心繪圖視圖(C)並將其用作繪圖的數據源。不確定情節如何運作,因此您可能需要撥打reloadData。您可能只需要實現一個fetchedResultsController委託方法controllerDidChangeContent來調用'reloadData'。

這樣你的意見完全獨立於對方,甚至不需要知道對方是否存在。你的方式D必須知道C的私密細節。現在你可以有一個後臺線程更新數據,並且你的繪圖會自動更新。