2011-12-15 119 views
1

我目前正在開發一個iPad應用程序。出於商業原因,不會有任何設備上的數據持久性。數據將根據需要使用NSURLConnection從後端服務器訪問。我開發了一個可以完成所有網絡訪問的「模型」對象。 UI具有一個分割視圖控制器,其中一個UINavigationControlller內的表視圖控制器作爲根控制器。用戶將在表格視圖控制器上鑽取以最終加載詳細視圖控制器。表格視圖控制器在將模型對象加載到UINavigationController時傳遞對模型對象的引用,以便它們可以從模型動態生成表格視圖單元的一部分。爲了響應,每個表視圖控制器將自身設置爲視圖中Model對象的代表將出現,並且在選中單元格時查詢模型對象,然後通過委託方法更新UI。ViewControllers之間共享網絡數據模型的設計模式

我的問題是在哪裏設置的最佳場所和取消委託數據模型的?目前我在ViewWillAppear中設置委託並在導航之後立即將其設置爲nil Controller:pushViewController:Animated。

// Setting the delegate 
- (void)viewWillAppear:(BOOL)animated { 
// set ourself as the delegate 
[[self dataModel] setDelegate:self]; 

// Get the count of studies 
[[self dataModel]GetListOfDiagnosticStudyResultsForID:[[self currentPatient]patientID]]; 

} 

// setting delegate to nil 
DiagnosticStudiesViewController *selectedVC = [[DiagnosticStudiesViewController alloc] init]; 
selectedVC.dataModel = self.dataModel; 
[[self dataModel]setDelegate:nil]; 
[[self navigationController]pushViewController:selectedVC animated:YES]; 

這是否合適?你能想到這種模式的任何問題。該計劃響應速度很快,我沒有看到儀器中存在任何問題。有一個更好的方法嗎?。

對不起,這個問題是長篇大論。

回答

1

我覺得這是一個不錯的方法,但有幾個因素來進行:

  • 你有2次共享數據模型,所以你可能需要更新視圖,當您返回到DiagnosticsStudiesViewController的父代(代碼中的self)取決於dataModel數據的顯示方式。
  • 如果您需要編寫代碼,這可能會在將來變得毛茸茸。在這種情況下,您可能必須將dataModel的副本傳遞給DiagnosticsStudiesViewController或以線程安全的方式處理對dataModel的編輯。
  • 你顯然需要兩個視圖控制器的網絡連接從服務器拉數據模型的工作,所以你已經和你的兩個視圖控制器工作流的決定。將來可能很難解開這些視圖控制器。

如果它適用於您的情況,並已作出決定不堅持我認爲你會沒事的。

+0

業務邏輯規定數據不會保留在設備上,因此第三點也得到了解決。關於你的第二點:你能否詳細說明你的思考過程? – Vinod 2011-12-15 20:20:13