gpt4 book ai didi

objective-c - Objective C 向一个 View Controller 传达另一个已更改的 View Controller

转载 作者:行者123 更新时间:2023-12-04 03:02:37 25 4
gpt4 key购买 nike

我有两个 View Controller - 一个显示主要内容的“主” View Controller 和一个“设置” TableView Controller ,它保存在滑出 View 内的容器中。概念是这样的:

  1. 用户点击设置面板上的一个项目。
  2. 设置 TVC 创建一个包含所有按钮设置的“按钮状态”字典对象。
  3. 按钮状态字典被传递给一个类,该类将按钮状态转换为主模型对象可以理解的设置字典。
  4. _______???

此时,我需要通知主视图 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com