簡體   English   中英

私有函數 didFinishLaunchingWithOptions 沒有被調用? (斯威夫特 3)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM