启动时未触发AppDelegate吗?

时间:2018-09-19 14:17:08

标签: ios swift appdelegate

我有一个定义为初始控制器的标签栏控制器,具有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”)。我还在上面设置了一个断点。

这就像视图控制器是在didFinishLaunchingWithOptions结束之前刚开始时在初始化settings.localCurrency之前初始化的。

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

谢谢

1 个答案:

答案 0 :(得分:0)

一个技巧,我将视图控制器作为初始视图控制器放在选项卡栏控制器的前面。他的功能是自动选择标签栏控制器,因此最终用户无需更改。

这样做,appDelegate代码将正常执行,并且一切正确。

似乎让标签栏控制器作为初始视图控制器不是一个好主意。很奇怪,但现在还是可以的...