如何在 Swift 中的 AppDelegate 中从其他 类 访问数组?

How can I access arrays from other classes inside AppDelegate in Swift?

我在一个名为 Anacii 的 class 中有一个数组,显然还有一个 AppDelegate class。当应用程序终止时,我试图将两个数组都位于 Anacii class 内保存到 UserDefaults。除了从 AppDelegate class 的 Anacii class 获取两个数组外,一切正常。这两个数组里面都有多个值(我用一些打印语句测试过)我可以从我的根视图控制器访问它们,里面的所有值都很好,但是当我从中获取它们时,它们 return 作为空数组AppDelegate class.

这是 Anacii class 中定义的两个数组:

class Anacii {

    // MARK: - Anacs / Rarities

    var anacs = [String]()
    var rarities = [Int]()

    ...

}

这是我在根视图控制器中设置实际值的地方:

class HomeController: UITableViewController, CLLocationManagerDelegate {

    private let a = Anacii()

    ...

    override func viewDidLoad() {

        super.viewDidLoad()

        for _ in 1...10 {

            collectAnac()

        }

        ...

    }

    ...

    // MARK: - Other functions

    func collectAnac() {

        let rarity = a.generateRarity()
        let anac = a.findAnac(rarity: rarity)

        a.anacs.append(anac)
        a.rarities.append(rarity)

        ...

    }

}

最后,这是我尝试从 AppDelegate class:

访问变量的地方
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    ...

    func applicationWillTerminate(_ application: UIApplication) {

        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

        let a = Anacii()

        let anacs = a.anacs // Comes out as []
        let rarities = a.rarities // Comes out as []

        ...

    }

}

AppDelegate 底部的两个值 class(anacs 和 rarities)都等于 [](使用 print 语句测试)。

抱歉,如果这是一个重复的问题,我查看了很多其他类似的 post,但找不到适合我的答案。谢谢!

TL;DR: 你应该阅读整篇文章但是......试图从 AppDelegate class 访问来自 Anacii class 的两个数组returns 空列表,即使这两个数组不为空(其他 classes 看到它们及其所有值)。请参阅上面的代码。抱歉,如果这是重复的 post。

简单地说,您不要 从 AppDelegate class 执行此操作。您可以从数据实际所在的 class 开始。在 HomeController 中,从 UIApplication 注册适当的通知(例如,应用程序正在后台运行)并响应它。

顺便说一下,该通知应该 而不是 applicationWillTerminate,因为它从未被调用过。

(您所看到的现象的实际原因是 AppDelegate 中的 Anacii() 是错误的对象。但最好以正确的方式执行此操作。)