【问题标题】:AppDelegate not triggered at start?AppDelegate 在启动时未触发?
【发布时间】:2018-09-19 14:17:08
【问题描述】:

我有一个标签栏控制器定义为初始控制器,具有 3 个底层控制器 A(默认)、B 和 C。

如果是第一次启动,我的 addDelegate/didFinishLaunchingWithOptions 会初始化 BD 信息。

当我第一次运行应用程序时,由于未初始化的数据(B 不是默认的),它在 B 视图控制器中崩溃。 该数据本应在 addDelegate 中初始化,但不是!

这是我的 appDelegate。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        print("Start")
        alreadyLaunch = defaults.bool(forKey: "alreadyLaunch")

        if !alreadyLaunch  {
            print("First launch")
            try! realm.write {
               settings.localCurrency  = Currencies.sharedInstance.getCurrency(withKey: "EUR")
               }
        } else {
            print("Already launched")
        }

        // Rest of code...

        Return true
    }

它似乎在开始时就崩溃了,因为 print("Start") 没有被触发。我也给它下了断点。

这就像 view controller 是在 didFinishLaunchingWithOptions 结束之前的开始时初始化的,在 settings.localCurrency 被初始化之前。

  • 标签栏控制器可以作为初始视图控制器吗?
  • 在我点击第二个按钮之前,标签栏控制器的第二个视图控制器被初始化是否正常?

谢谢

【问题讨论】:

  • 您发布的代码在帮助诊断此问题方面几乎毫无用处。请展示如何初始化“BD 值”并将其传递给选项卡控制器。我怀疑 BD 值是异步初始化的,并且在您的选项卡控制器初始化之前没有返回结果
  • 我用初始化编辑了这个问题。
  • 设置异常断点以获取发生崩溃的真实位置。你在哪里将alreadyLaunch 设置为true

标签: ios swift appdelegate


【解决方案1】:

一个技巧,我把一个视图控制器作为初始视图控制器放在标签栏控制器的前面。他的功能是自动切换到标签栏控制器,因此最终用户没有任何变化。

这样,appDelegate代码执行正常,一切正常。

似乎将标签栏控制器作为初始视图控制器不是一个好主意。很奇怪,不过现在没事了……

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多