簡體   English   中英

在ViewController之間共享網絡數據模型的設計模式

[英]Design pattern for sharing a network data model between ViewControllers

我目前正在開發iPad應用程序。 由於業務原因,設備上不會存在任何數據持久性。 可以根據需要使用NSURLConnection從后端服務器訪問數據。 我已經開發了一個“模型”對象,可以進行所有網絡訪問。 UI有一個拆分視圖控制器,在UINavigationControlller內部有一個表視圖控制器作為根控制器。 用戶將在表視圖控制器上向下鑽取以最終加載詳細視圖控制器。 表格Viewcontroller被加載到UINavigationController時,正在傳遞對模型對象的引用,以便它們可以從模型動態生成表格視圖單元的部分。 為了響應,每個Table View控制器將自身設置為視圖中Model對象的委托,並在選擇單元格時查詢模型對象,后者又通過委托方法更新UI。

我的問題是設置和取消設置數據模型的委托的最佳位置在哪里? 目前,我在ViewWillAppear中設置了委托,並在導航Controller:pushViewController:Animated之后立即將其設置為nil。

// 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];

這樣合適嗎 您能想到這種模式的任何問題嗎? 該程序反應迅速,我在儀器中看不到任何問題。 有一個更好的方法嗎?。

抱歉,這個問題已經解決了。

我認為這是一種不錯的方法,但是需要考慮以下幾點:

  • 您正在共享具有2個視圖的dataModel,因此當您返回DiagnosticsStudiesViewController的父級(代碼中的自身)時,可能必須更新視圖,具體取決於dataModel數據的顯示方式。
  • 如果您需要對代碼進行線程化,將來可能會變得冗長。 在這種情況下,您可能必須復制dataModel才能傳遞給DiagnosticsStudiesViewController或以線程安全的方式處理對dataModel的編輯。
  • 很顯然,兩個視圖控制器都需要網絡連接才能正常工作,因此,通過從服務器中提取dataModel來確定兩個視圖控制器的工作流程。 將來可能很難斷開這些視圖控制器的耦合。

如果它適合您的情況,並且已決定不堅持下去,那么我認為您會好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM