改變我有一個標籤欄控制器和它的兩個控制器內:一個MapView控制器和的tableview + NSFetcheddata控制器。兩者都顯示來自核心數據的特定日期的信息,並有一個按鈕以模態方式顯示日期選擇器。的iOS:通知其他標籤視圖控制器有關在其數據集
我已經實現了有我的控制器的數據集改變時,他們的模式視圖控制器通過消失代表團,但我想兩個控制器來更新他們的數據不僅顯示誰模態控制器的一個。
我想過創造了兩個控制器的協議並設置對方爲其委託,但我想知道如果我做就在這裏。
乾杯,
蒂埃裏
改變我有一個標籤欄控制器和它的兩個控制器內:一個MapView控制器和的tableview + NSFetcheddata控制器。兩者都顯示來自核心數據的特定日期的信息,並有一個按鈕以模態方式顯示日期選擇器。的iOS:通知其他標籤視圖控制器有關在其數據集
我已經實現了有我的控制器的數據集改變時,他們的模式視圖控制器通過消失代表團,但我想兩個控制器來更新他們的數據不僅顯示誰模態控制器的一個。
我想過創造了兩個控制器的協議並設置對方爲其委託,但我想知道如果我做就在這裏。
乾杯,
蒂埃裏
這裏有很多不同的方式來做到這一點。一種方法是使用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];
}
您可以設置既作爲代表(即兩名代表),並重新使用您的模態視圖控制器兩種。
或者,使用NSNotificationCenter,但我認爲委託方法更好,因爲這種關係更接近。如果您想要發送多個對象,這是要走的路。
委託模式實際上只是設計用於1對1的關係。 NSNotifications是要走的路。 –
謝謝克里斯,你當然是對的。 – Mundi
感謝您的回覆。使用Cameron的示例來使用通知。 –
蒂埃裏, 是新到iOS,我不會把這樣的一個「答案」,但使用一個全球性的通知系統不健全適合這類問題給我。
尋找類似問題的答案,我偶然發現了NSFetchedResultsController的引用,它將爲您計算結果,隨時用作UITableView模型 - 只讀取知識。與你的問題相關的部分似乎是它的委託,NSFetchedResultsControllerDelegate,它定義了幾個方法,這些方法將允許將結果的變化傳達給任何數量的感興趣方。
但正如我所說,我只是偶然發現了它,而現在只是試圖利用它。
Regards,nobi
非常感謝!似乎有一個正確的方法來處理這個問題。從委託人的方法中調用委託人的方法並不像我這樣做。 –