[英]application:didFinishLaunchingWithOptions is not being called
[英]Private func didFinishLaunchingWithOptions not being called? (Swift 3)
應用程序第一次開始運行時不應該調用didFinishLaunchingWithOptions
嗎? 我在這個方法上設置了一個斷點,當我在模擬器中運行應用程序時,斷點不會被命中,這意味着該方法不會被調用。 每當應用程序啟動時,我都試圖從 UserDefaults 加載一些數據,但它被完全忽略了。 我注意到的一件事是默認情況下它是private func
而不是func
。 如果我擺脫了private
,我會收到一條警告“UIApplicationDelegate 中有一個幾乎相似的可選要求”。 有人可以向我解釋這意味着什么以及private func
是否與被忽略的方法有關? 當我在模擬器中運行我的應用程序時,甚至應該調用該方法嗎? 如果沒有,我如何測試在我的應用程序啟動后是否正在檢索數據? AppDelegate
中的所有其他方法都會被正常調用(例如, applicationDidEnterBackground
方法工作得很好)。
刪除您的方法簽名並讓 Xcode 自動完成它
我還遇到了無法調用 AppDelegate 中的didFinishLaunchingWithOptions
方法的問題。 我的函數也被標記為私有,看起來像這樣
private func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
問題是這是舊語法! 顯然,當我將我的項目從 Swift 2.x 轉換為 Swift 3 時,Xcode 沒有轉換 AppDelegate 中的方法。 新語法如下所示
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
斯威夫特 4.2:
func application( _ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
對於 Swift ~3.0 用以下簽名替換 didFinishLaunchingWithOptions
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
}
您是否在其中一個ViewControllers
實現了didFinishLaunchingWithOptions
? 不會調用此方法的自定義實現。 此方法在ApplicationDelegate
定義,一旦應用程序啟動,它將始終被調用。 如果您還沒有在任何ViewController
再次定義該方法,並且AppDelegate
方法沒有被調用,請嘗試重置模擬器。 從模擬器菜單Simulator -> Reset content and settings
。
如果編譯器提示將didFinishLaunchingWithOptions
方法設為私有,則該方法的參數可能會導致錯誤。 application(_:didFinishLaunchingWithOptions:) 委托方法的參數現在作為 [UIApplicationLaunchOptionsKey: Any]? 橋接到 Swift,而不是 [NSObject : AnyObject]?。 所以修改方法簽名,如圖所示。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// ...
}
此方法在 ApplicationDelegate 中定義,一旦應用程序啟動,它將始終被調用。 如果您沒有在任何 ViewController 中再次定義該方法,並且 AppDelegate 中的方法沒有被調用,請嘗試重置模擬器。
打開模擬器 -> 菜單模擬器 -> 重置內容和設置。
-(BOOL)application(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//..
}
Swift 4.2 更新:
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool
從設備中刪除應用程序並重新啟動 Xcode 在這里為我工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.