【发布时间】:2011-05-07 12:40:43
【问题描述】:
我有两个视图控制器:LocationsViewController 和 SettingsViewController。 LocationsViewController 符合 SettingsViewControllerDelegate 协议。该协议仅包含 1 个方法:
// SettingsViewControllerDelegate.h
- (void)settingsViewControllerDidFinish:(SettingsViewController *)controller;
当我的LocationsViewController 收到该委托消息时,它会关闭以模态方式呈现的SettingsViewController。
到目前为止,我认为这是很好的代码设计。问题是这些视图控制器之间的数据共享。两个视图控制器呈现相同的数据:大约 10 个对象(位置)的数组。只有SettingsViewController 允许更改该数组。
现在我以一种不优雅的方式“解决”了这个问题:两个视图控制器都引用了我的应用委托,而我的应用委托有一个 locations 属性。 SettingsViewController 直接更改该数组。例如:
// SettingsViewController.m
[appDelegate.locations addObject:newLocation];
它有效,但我对此不满意。我知道让您的视图控制器保留对应用程序委托的引用是一件坏事。有什么建议吗?
【问题讨论】:
-
在这种情况下,您绝对应该使用单例。对于 2016 年,请注意在 Swift 中使用 latest 正确的单例用法。 iOS 具有从上到下的单例(您的应用程序委托是单例,您的加速器是单例,手机上的几乎所有东西都是单例),所以如果不使用单例,除了最简单的 iOS 应用程序之外,您什么也做不了。但是如果你是一个学习者,不要过度使用单例。它们很重要,但要小心对待。
标签: iphone objective-c cocoa-touch oop model-view-controller