2014-03-07 62 views
1

我的目標是以兩種不同的方式顯示經銷商位置:地圖和桌面視圖。iOS Container ViewController數據流

我有包含兩個子視圖控制器的容器視圖控制器(DealersViewController):DealersMapViewController和DealersListViewController。用戶可以使用導航欄上的UISegmentedControl在VC之間切換。點擊地圖註釋或桌面視圖單元會推送DealersDetailViewController。

的切換(使用代碼從Changing view controller when Segmented Control changes)已經實現,並且似乎很好地工作,象詳細的推動。

我想改進的是容器和兒童之間的數據流。經銷商的位置從互聯網上下載(JSON)在父母和完成NSArray *位置屬性設置在地圖VC和列表VC。這個數組將包含由AFNetworking自動創建的字典對象,每個字典對象都有位置數據(每個位置字典將有一個標題,字幕,緯度,經度以符合MKAnnotation協議,但也包括圖像和描述等其他內容)。

我的問題是:我如何確定容器VC和兩個VC都同意位置數據的結構?從理論上講,如果有人想開發另一個子視圖控制器來添加到我的容器中,例如在集合視圖中顯示經銷商位置,他如何正式知道如何預期數據。蘋果說:「如果容器需要孩子聲明方法或屬性,它應該定義一個協議來執行此操作:」。我可能會迫使孩子申報地點財產,但該陣列可以包含什麼...

也許家長可爲孩子一個數據源?我還沒有嘗試過這種方法。

我可能過於複雜的東西,但我的目的也是學習如何正確地創建可重用的組件,也使用這樣的東西一般定製協議/委託和設計模式的實踐。

謝謝。

回答

0

如果我理解正確,那麼您的問題是構造數據,以便您的所有控制器對它有相同的理解。

大概去解決它的最好方法是創建一個自定義位置類,並有反序列化JSON成類的一個實例,然後就通過它身邊,你認爲合適。有很多方法可以解決反序列化問題,但JSON Model是一個很好的自動處理例子。

鉈;博士:轉換您的JSON字典到自定義類,然後將它們傳遞給你的孩子視圖控制器,通過屬性或代表,無論你找到更多的方便。

+0

恭維阿迪斯的回答,看看Objectify(http://tigerbears.com/objectify/)。它會幫助你從你的JSON數據結構創建NSObject模型。 – dezinezync

+0

謝謝。如果我要使用代理/數據源方法(我開始認爲這可能是合適的),孩子們如何知道父母已準備好提供數據? (也就是說,它已經完成了下載JSON) – LorTush

+0

如果使用協議,只需使父視圖控制器的子代理程序創建一個在數據完成下載時調用的方法。 [self.mapDelegate updateLocation:myLocation]行中的內容; – Adis

相關問題