2011-08-24 55 views
3

改變我有一個標籤欄控制器和它的兩個控制器內:一個MapView控制器和的tableview + NSFetcheddata控制器。兩者都顯示來自核心數據的特定日期的信息,並有一個按鈕以模態方式顯示日期選擇器。的iOS:通知其他標籤視圖控制器有關在其數據集

我已經實現了有我的控制器的數據集改變時,他們的模式視圖控制器通過消失代表團,但我想兩個控制器來更新他們的數據不僅顯示誰模態控制器的一個。

我想過創造了兩個控制器的協議並設置對方爲其委託,但我想知道如果我做就在這裏。

乾杯,

蒂埃裏

回答

7

這裏有很多不同的方式來做到這一點。一種方法是使用NSNotificationCenter。定義你自己的自定義通知名稱:

static NSString *const CSDataUpdatedNotification = @"CSDataUpdatedNotification"; 

訂閱該通知中既您的控制器:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataUpdated:) name:CSDataUpdatedNotification object:nil]; 

並實行dataUpdated:更新您的數據:

- (void)dataUpdated:(NSNotification *)notification 
{ 
    // Handle updates here 
} 

在控制器造成的變化,發佈通知:

- (void)updateData 
{ 
    // Data updating routine 
    // ... 

    [[NSNotificationCenter defaultCenter] postNotificationName:CSDataUpdatedNotification object:self]; 
} 
+0

非常感謝!似乎有一個正確的方法來處理這個問題。從委託人的方法中調用委託人的方法並不像我這樣做。 –

1

您可以設置既作爲代表(即兩名代表),並重新使用您的模態視圖控制器兩種。

或者,使用NSNotificationCenter,但我認爲委託方法更好,因爲這種關係更接近。如果您想要發送多個對象,這是要走的路。

+0

委託模式實際上只是設計用於1對1的關係。 NSNotifications是要走的路。 –

+0

謝謝克里斯,你當然是對的。 – Mundi

+0

感謝您的回覆。使用Cameron的示例來使用通知。 –

0

蒂埃裏, 是新到iOS,我不會把這樣的一個「答案」,但使用一個全球性的通知系統不健全適合這類問題給我。

尋找類似問題的答案,我偶然發現了NSFetchedResultsController的引用,它將爲您計算結果,隨時用作UITableView模型 - 只讀取知識。與你的問題相關的部分似乎是它的委託,NSFetchedResultsControllerDelegate,它定義了幾個方法,這些方法將允許將結果的變化傳達給任何數量的感興趣方。

但正如我所說,我只是偶然發現了它,而現在只是試圖利用它。

Regards,nobi

相關問題