我有一个定义为初始控制器的标签栏控制器,具有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之前初始化的。
谢谢
答案 0 :(得分:0)
一个技巧,我将视图控制器作为初始视图控制器放在选项卡栏控制器的前面。他的功能是自动选择标签栏控制器,因此最终用户无需更改。
这样做,appDelegate代码将正常执行,并且一切正确。
似乎让标签栏控制器作为初始视图控制器不是一个好主意。很奇怪,但现在还是可以的...