【发布时间】: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