2010-11-07 57 views
0

RootViewController我對核心數據存儲(?)執行一個提取請求,它返回一個NSSet,比方說,食譜。當用戶在rootviewcontroller中選擇配方時,我執行pushViewController並將其中一個配方推送到childcontroller。NSFetchedResultsController和childController

在childController中,用戶可以刷新「配方」,以便他可以更新配料。當用戶選擇「刷新」時,我連接到interwebs以接收新數據。這個新數據我puth在self.recipe.ingredients。

這一切都很好。但後來我想重新加載chilController視圖。所有刷新的東西都是在後臺完成的,所以我想在覈心數據內容完成時發出一個信號。

Hello NSFetchedResultsController!但要使用NSFetchedResultsController,你需要一個NSFetchRequest。而且NSFetchRequest在我的rootViewController中實例化。

因此,當我在我的rootViewController中創建一個controllerDidChangeContent方法時,我發現它被觸發。但現在是一個問題:我如何更新我的childViewController的tableview?

我想到了打電話我rootViewControllers' controllerDidChangeContent方法,這個方法: [self.childController controllerDidChangeContent:控制器] 所以剛好路過的燒製方法

或者實例化childController的時候,我也可以通過對fetchRequest到childController並在childController實例中實例化一個新的NSFetchedResultsController。

這兩個最好的是什麼?或者我還沒有想過其他可能性?

提前致謝!

回答

0

我在我的一個項目中解決了這個問題。我有孩子控制器創建並使用自己的NSFetchRequest。它運作良好,但我很想知道是否有人推薦一種不同的方法。

因此,使用你的應用程序的條款,在這裏它:在childController中,我使用Ingredient實體創建了一個全新的NSFetchRequest,並在其上放置了一個謂詞以從我的食譜中查找所有成分。注意:這假設你有從成分回到配方的反向關係。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Ingredient" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recipe == %@", self.recipe]; 
[fetchRequest setPredicate:predicate]; 

因此,childController使用此fetchRequest而不是在RootViewController中找到的NSFetchRequest。每當添加,刪除或更新成分時,childController現在都會收到消息。不要忘記,childController將需要實現NSFetchedResultsControllerDelegate協議。

+0

謝謝dnorcott。我將在childController中實例化一個新的nsfetchrequest&nsfetchedresultscontroler對象。 – Leon 2010-11-13 08:29:57

相關問題