web-dev-qa-db-ja.com

プライベート関数didFinishLaunchingWithOptionsが呼び出されていませんか? (スウィフト3)

didFinishLaunchingWithOptionsは、アプリが初めて実行を開始したときに呼び出されるはずではありませんか?このメソッドにブレークポイントを設定しましたが、シミュレーターでアプリを実行してもブレークポイントがヒットしません。つまり、メソッドが呼び出されません。アプリが起動するたびにUserDefaultsからいくつかのデータを読み込もうとしていますが、完全に無視されています。私が気づいたことの1つは、デフォルトではprivate funcfuncの代わりに。 privateを削除すると、「UIApplicationDelegateにはほぼ同様のオプション要件があります」という警告が表示されます。誰かがこれが何を意味するのか、そしてprivate funcメソッドが無視されることと関係がありますか?シミュレーターでアプリを実行するときに、そのメソッドが呼び出されることもありますか?そうでない場合、アプリの起動後にデータが取得されているかどうかをテストするにはどうすればよいですか? AppDelegateの他のすべてのメソッドは正常に呼び出されます(たとえば、applicationDidEnterBackgroundメソッドは完全に正常に機能します)。

9
Freddy Benson

メソッドシグネチャを削除し、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

Swift 4.2:

func application( _ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
33
Yannick

for Swift 〜3.0 didFinishLaunchingWithOptionsを置き換えます次の署名で

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
}
3
Meghs Dhameliya

didFinishLaunchingWithOptionsの1つにViewControllersを実装しましたか?このメソッドのカスタム実装への呼び出しはありません。このメソッドはApplicationDelegateで定義されており、アプリが起動されると常に呼び出されます。 ViewControllerでメソッドを再度定義しておらず、AppDelegateでメソッドが呼び出されていない場合は、シミュレーターをリセットしてみてください。シミュレータメニューからSimulator -> Reset content and settings

コンパイラがdidFinishLaunchingWithOptionsメソッドをプライベートにするように要求する場合は、メソッドのパラメータがエラーの原因である可能性があります。 application(_:didFinishLaunchingWithOptions :)デリゲートメソッドのパラメーターは、[NSObject:AnyObject]?ではなく、[UIApplicationLaunchOptionsKey:Any]?としてSwiftにブリッジされるようになりました。したがって、メソッドを変更します。示されている署名。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// ...
}
2
Mathews

Swift 4.2:

func application(
    _ application: UIApplication, 
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool
1
Pham Quan

このメソッドはApplicationDelegateで定義されており、アプリが起動されると常に呼び出されます。 ViewControllerでメソッドを再度定義しておらず、AppDelegateのメソッドが呼び出されていない場合は、シミュレーターをリセットしてみてください。

シミュレーターを開く->メニューシミュレーター->コンテンツと設定をリセットします。

-(BOOL)application(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//..
}
1
vishnu varthan