我有两个视图控制器:LocationsViewController
和SettingsViewController
。 LocationsViewController
符合SettingsViewControllerDelegate
协议。该协议只包含一种方法:
// SettingsViewControllerDelegate.h
- (void)settingsViewControllerDidFinish:(SettingsViewController *)controller;
当我的LocationsViewController
收到该委托邮件时,它会解除以模态方式呈现的SettingsViewController
。
我认为到目前为止这是一个很好的代码设计。问题是这些视图控制器之间的数据共享。两个视图控制器都呈现相同的数据:大约10个对象(位置)的数组。只有SettingsViewController
允许更改该数组。
现在我以一种不雅的方式“解决”了这个问题:两个视图控制器都有一个对我的app委托的引用,而我的app委托有一个locations
属性。 SettingsViewController
直接改变该数组。例如:
// SettingsViewController.m
[appDelegate.locations addObject:newLocation];
它有效,但我对它不满意。我理解让您的视图控制器保持对应用程序委托的引用是一件坏事。有什么建议吗?
答案 0 :(得分:3)
您可能希望使用观察者监视器,我认为数组中的更改。我可以输入一些内容,但StackOverFlow中已有很好的答案。
答案 1 :(得分:1)
对于这样的情况,我使用单个Settings
对象。这只是一个NSObject
,它有我的应用程序中的设置方法。我通过调用+[Settings settings]
来获取实例。有些设置只是NSUserDefaults
的包装,在这种情况下我只是定义静态方法。
Singletons也不是最佳实践,但它们在SDK中被广泛使用(另外,传递设置实例让每个人都快速烦人)。