用于在ViewControllers之间共享网络数据模型的设计模式

时间:2011-12-15 19:30:03

标签: ios uitableview

我目前正在开发一款iPad应用程序。出于商业原因,设备上不会有任何数据持久性。将根据需要使用NSURLConnection从后端服务器访问数据。我开发了一个“模型”对象,它可以进行所有网络访问。 UI具有拆分视图控制器,其中UINavigationControlller内的表视图控制器作为根控制器。用户将深入查看表视图控制器以最终加载详细视图控制器。 ViewControllers表在将模型对象加载到UINavigationController时传递对模型对象的引用,以便它们可以从模型中动态生成表视图单元的一部分。为了响应,每个表视图控制器将自身设置为视图中将显示模型对象的委托,并且当选择单元格时,查询模型对象,模型对象又通过委托方法更新UI。

我的问题是设置和取消设置数据模型委托的最佳位置在哪里?目前我在ViewWillAppear中设置委托并在导航控制器后立即将其设置为nil: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 个答案:

答案 0 :(得分:1)

我认为这是一个很好的方法,但有几点需要考虑:

  • 您正在与2个视图共享dataModel,因此您可能必须在返回DiagnosticsStudiesViewController的父级(代码中的self)时更新视图,具体取决于dataModel数据的显示方式。
  • 如果您需要为代码添加线程,将来可能会变得毛茸茸。在这种情况下,您可能必须复制dataModel以传递给DiagnosticsStudiesViewController或以线程安全的方式处理对dataModel的编辑。
  • 您显然需要网络连接才能使两个视图控制器都能正常工作,因此您可以通过从服务器中提取dataModel来确定两个视图控制器的工作流程。在将来,可能很难将这些视图控制器解耦。

如果它适用于您的情况并且已经做出决定不坚持我认为您会没事的。