コアスポットライトを使用して、スポットライトの検索結果からビューコントローラーを開こうとしています。
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray *restorableObjects))restorationHandler
{
if(self.window.rootViewController){
[self.window.rootViewController restoreUserActivityState:userActivity];
}
return YES;
}
これは、アプリがすでにバックグラウンドで実行されている場合に機能するようですが、アプリを閉じてスポットライト検索結果をタップすると、このメソッドが呼び出されないようで、アプリケーションがメインインターフェイスで起動するだけの動作が得られます。
私のアプリが閉じているときにも機能させるための提案はありますか?何が起こっているのかをデバッグする方法はありますか(デバッガーを接続するためにアプリを実行する必要があるため、検索結果からアプリの起動をシミュレートする方法がわかりません)?.
ここでそれはあなたのアドバイスに従った完全な答えに従います。
// In application: didFinishLaunchingWithOptions:
NSDictionary *activityDic = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey];
if (activityDic) {
if(self.window.rootViewController){
NSUserActivity * userActivity = [activityDic valueForKey:@"UIApplicationLaunchOptionsUserActivityKey"];
[self.window.rootViewController restoreUserActivityState:userActivity];
}
}
ニコ、
まず第一に、Xcodeからアプリを起動し、すぐには開かない方法があります。スキームのプロパティを開き、[実行]セクションに移動し、[情報]の下に、何が起こっているかをデバッグするのに役立つスイッチがあります。
「実行可能ファイルが起動するのを待ちます」。
このスイッチをアクティブにすると、Xcodeからアプリを起動できます。Xcodeは、アプリが検索から開かれるまで待機し、デバッガーを接続します。
お役に立てば幸いです。
イワン
Facebook SDKを使用していて、didfinishlaunching
でプレーンテキストではなくFBSDK
を返し、最後にtrueを返す場合、continueuseractivity
を押すときに問題が発生する可能性があります。
たくさん検索し、さまざまな方法を試した後、trueを返し、これにコメントする必要がありました。
FBSDKApplicationDelegate.sharedInstance()。application(application、didFinishLaunchingWithOptions:launchOptions)
新しいSwift 5には、_SceneDelegate.Swift
_という新しい新しいファイルがあります。メソッドscene(_ scene: UIScene, continue userActivity: NSUserActivity)
を使用してください。
didFinishLaunchingWithOptionsはYESを返す必要があるため、continueUserActivityが呼び出されます。
アプリケーションの終わりに追加:didFinishLaunchingWithOptions:
NSDictionary *activityDictionary = launchOptions[UIApplicationLaunchOptionsUserActivityDictionaryKey];
if (activityDictionary) {
NSUserActivity *userActivity = activityDictionary[UIApplicationLaunchOptionsUserActivityTypeKey];
if (userActivity) {
return YES;
}
}
return NO;
アプリが閉じられた場合、application:continueUserActivity:は呼び出されません。代わりに、アプリケーションでlaunchOptions辞書のすべての情報を取得します。didFinishLaunchingWithOptions:
// In application: didFinishLaunchingWithOptions:
NSDictionary *activityDic = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey];
if (activityDic) {
// Continue activity here
}
continue userActivity
は最新のSwiftバージョンで変更されました。funcの変更は私のために働きました。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool
に
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool.
Firebaseの動的リンクを開いているときに同様の問題が発生しました。私の場合、問題は呼び出しが変更されたことでした。これは、これ以上呼び出されなかったレガシーコードにあったものです。
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool
これは私の場合に機能した呼び出しです:
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
通話がどの程度正確に書かれているかに注意してください。 private
を追加することを提案するXcodeの警告にだまされないでください-それは役に立ちません。