在视图控制器之间共享和更改数组的优雅方式

时间:2010-11-09 21:20:02

标签: iphone objective-c cocoa-touch oop model-view-controller

我有两个视图控制器:LocationsViewControllerSettingsViewControllerLocationsViewController符合SettingsViewControllerDelegate协议。该协议只包含一种方法:

// SettingsViewControllerDelegate.h
- (void)settingsViewControllerDidFinish:(SettingsViewController *)controller;

当我的LocationsViewController收到该委托邮件时,它会解除以模态方式呈现的SettingsViewController

我认为到目前为止这是一个很好的代码设计。问题是这些视图控制器之间的数据共享。两个视图控制器都呈现相同的数据:大约10个对象(位置)的数组。只有SettingsViewController允许更改该数组。

现在我以一种不雅的方式“解决”了这个问题:两个视图控制器都有一个对我的app委托的引用,而我的app委托有一个locations属性。 SettingsViewController直接改变该数组。例如:

// SettingsViewController.m
[appDelegate.locations addObject:newLocation];

它有效,但我对它不满意。我理解让您的视图控制器保持对应用程序委托的引用是一件坏事。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您可能希望使用观察者监视器,我认为数组中的更改。我可以输入一些内容,但StackOverFlow中已有很好的答案。

Key Value Observing with an NSArray

答案 1 :(得分:1)

对于这样的情况,我使用单个Settings对象。这只是一个NSObject,它有我的应用程序中的设置方法。我通过调用+[Settings settings]来获取实例。有些设置只是NSUserDefaults的包装,在这种情况下我只是定义静态方法。

Singletons也不是最佳实践,但它们在SDK中被广泛使用(另外,传递设置实例让每个人都快速烦人)。