gpt4 book ai didi

ios - 如何从 AppDelegate.swift 访问不是 Root View Controller 的 View Controller ?

转载 作者:行者123 更新时间:2023-11-29 01:53:30 24 4
gpt4 key购买 nike

我认为这是一个初学者问题。我目前有两个 View Controller :

class MainViewController: UIViewController {
var markersToDelete = Marker()
func deleteMarkers() {}
}

class MapViewController: UIViewController {
var markersToDelete = Marker()
func deleteMarkers() {}
}

MapViewController 在 Storyboard中使用模态转场进行实例化。我知道我可以使用以下代码访问 AppDelegate.swift 中的 MainViewController:

var mainViewController = self.window!.rootViewController as! MainViewController

我如何使用MapViewController做同样的事情?

编辑

根据下面的评论,我正在更新此内容以包含更多详细信息。这是我想要完成的:

我在两个 View Controller 中都有 IBActions,将标记项附加到
markersToDelete 数组。方法deleteMarkers用于在Core Data持久存储中查找对应的项目并删除它们;当 applicationDidEnterBackground 或 applicationWillTerminate 时,AppDelegate 会调用它。

这就是我想从应用程序委托(delegate)访问两个 View Controller 的原因。我开始认为可能有更好的方法来做到这一点。

最佳答案

其他一些答案提出了实例化 Controller 的方法,但它们似乎不正确,因为您提到 Controller 是通过 segue 实例化的。没有直接的方法可以做你想做的事情,而且有充分的理由,从不相关的代码访问东西应该很困难。在您非常简单的示例中,鉴于已经提供了 Controller ,此代码将起作用:

var mainViewController = self.window!.rootViewController as! MainViewController
let mapViewController = mainViewController.presentedViewController

但我强烈反对 AppDelegate 中的此类代码,它做了很多假设,如果您的导航结构发生变化,它很容易崩溃。更具体地说明您想要实现的目标,您可能会得到答案,从而引导您构建更好的架构。

编辑

根据提问者提供的新信息,这是针对更具体问题的建议解决方案:

我知道你有 Marker Core Data 上下文中的对象,并且您希望批量删除其中的一些对象。将 bool 属性添加到 Marker 怎么样?类,并为要删除的对象将其设置为 true。然后,在 AppDelegate ,您获取该属性设置为 true 的标记,然后删除它们。这样你就不需要维护数组,并且类之间没有耦合。

关于ios - 如何从 AppDelegate.swift 访问不是 Root View Controller 的 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31142785/

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