- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 View Controller - 一个显示主要内容的“主” View Controller 和一个“设置” TableView Controller ,它保存在滑出 View 内的容器中。概念是这样的:
此时,我需要通知主视图 Controller (它包含我的主模型对象的实例)设置已经更新,它需要更新其模型对象的设置。我该怎么做呢?我是否应该在主视图 Controller 上有一个类方法并将头文件包含在我的设置转换类中?
最佳答案
与其他答案相反,这里真的没有必要使用单例。您所需要的只是一个在主视图 Controller 和设置 View Controller 之间共享的对象,或者在它们之间传递信息的某种方式。以下是一些不需要新单例类的选项:
共享模型:如果您使用模型类来跟踪您的设置,只要您简单地告诉它们,您的主视图 Controller 和设置 View Controller 都可以访问该模型关于模型。例如,如果您在应用程序启动时创建两个 View Controller ,则可以同时创建模型并将模型传递给两个 Controller :
MyModel *model = [[MyModel alloc] initWithFilePath:somePath];MainViewController *mainVC = [[MainViewController alloc] initWithNibName:nil bundle:nil];SettingsViewController *settingsVC = [[SettingsViewController alloc] initWithNibName:nil bundle:nil];mainVC.model = model;settingsVC.model = model;
共享对象:如果您不需要/想要一个完整的模型类,并且您只需要在两个 Controller 之间传达一些变化,让他们共享一个简单的数据容器,如字典。例如,假设主视图 Controller 负责创 build 置 View Controller ,然后将其推送到导航堆栈。它可以轻松地说:“这是一个可变字典;使用它来获取您需要的任何设置,并记录任何更改。”主视图 Controller 中的代码看起来像这样:
self.settings = [NSMutableDictionary dictionary];// ...code to add all the settings to the dictionary...SettingsViewController *settingsVC = [[SettingsViewController alloc] initWithNibName:nil bundle:nil];settingsVC.settings = self.settings;[self.navigationController pushViewController:settingsVC];
委托(delegate):考虑前面的情况,但不是将可变字典或模型对象传递给设置 View Controller ,而是将主视图 Controller 本身作为共享对象传递。如果设置是主视图 Controller 的属性,设置 View Controller 可以访问这些属性(请使用访问器)来获取和设置设置。或者反过来让主视图 Controller 保持对设置 View Controller 的引用,这样它就可以为它需要的任何设置请求值。无论哪种方式,一个 View Controller 都充当另一个 View Controller 的助手,简而言之就是委托(delegate)模式。
NSUserDefaults:共享用户默认对象已经是一个单例,所以你真的不需要一个不同的。两个 View Controller 都可以简单地访问共享的用户默认对象来获取/设置他们需要的设置。
无论选择哪一个,您都需要确保阅读每个 Controller 的 -viewWillAppear
中的设置并根据需要更新 UI。
您的问题主要是关于如何让两个 View Controller 相互交谈。有很多方法可以做到这一点,其中任何一种都不需要单例。
关于objective-c - Objective C 向一个 View Controller 传达另一个已更改的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17247406/
当我们的Infinispan集群(版本9.4.8.Final)出现异常时,出现异常的节点会将此信息发送给集群中的其他节点。这似乎是设计使然。 此事件可能会导致流量过大,从而导致超时异常,进而使节点想要
就我对 Redux 的理解而言,它是关于将 UI 的所有状态保存在一个存储中(以便能够轻松地重现某些状态并且没有副作用)。您可以通过触发 reducer 的触发操作来操纵状态。 我目前正在编写一个类似
如果我使用 QtConcurrent::run 启动一些异步执行函数,并使用 QFutureWatcher 监控返回的 future ,如果我可以在异步执行函数中做些什么来传达一些进度文本,这将导致
我是一名优秀的程序员,十分优秀!