【问题标题】:Accessing the top view controller from the app delegate从应用委托访问顶视图控制器
【发布时间】:2013-05-14 04:28:24
【问题描述】:

我需要我的 AppDelegate 能够获得指向我当前显示的视图控制器的指针(已经探索了 visibleViewController 的导航视图,但更通用的版本会更好)并从我的对象实例中读取状态以用于applicationWillResignActive.

我在这方面的尝试让我初始化了新对象,而这些对象只是空的。我在运行时的任何时候都需要对象的状态。

我想我可以创建一个与我的对象平行的单例类,我可以从应用程序委托中调用它,但这看起来很笨重而且冗长。我还想过让视图控制器成为 AppDelegate 的委托,但这似乎更糟。

我知道我可能忽略了显而易见的事情,但我的搜索措辞肯定是错误的,因为我无法弄清楚。我搜索了 Stack Overflow 10 分钟,浏览了视图控制器和 appdelegate 文档。

如何在运行时从应用委托访问对象的属性值?

【问题讨论】:

标签: ios cocoa-touch uiviewcontroller appdelegate


【解决方案1】:

根据您的视图控制器的具体功能以及您希望应用在重新打开时如何恢复其状态,AppDelegate 的参与度应该最低。

相反,您应该考虑让合适的视图控制器观察UIApplicationWillResignActiveNotification 通知并各自执行自己的状态存储。当应用程序重新打开时,AppDelegate 只是恢复根视图控制器,然后根 VC 检查它是否需要恢复任何东西,并在一个链中直到所有数据都恢复。这使得所有逻辑和数据存储都模块化和隔离。

如果你真的:

在运行时的任何时候都需要对象的状态

然后你有一个不同的设计问题,你需要把事情分解。 AppDelegate 应该用于特定的任务,它在 applicationWillResignActive 中扮演一个角色,但这个角色不应该是管理 100% 需要完成的工作。

【讨论】:

  • Wain,当您说视图控制器应该“观察”时,是在特别建议使用 KVO?
  • UIApplicationWillResignActiveNotification 是 NSNotificationCenter 发布的通知。视图控制器可以将自己添加为观察者。这不是 KVO。
猜你喜欢
  • 2013-10-26
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2012-12-17
  • 2014-09-09
  • 1970-01-01
相关资源
最近更新 更多