2015-09-20 25 views
10

私は、スポットライト検索結果からビューコントローラを開くためにコアスポットライトを使用しようとしています。continueUserActivityが検索終了アプリから呼び出されていません

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray *restorableObjects))restorationHandler 
{ 

if(self.window.rootViewController){ 
    [self.window.rootViewController restoreUserActivityState:userActivity]; 
} 

return YES; 
} 

これは、アプリは、すでにバックグラウンドで実行されている場合、それを閉じて、私はSpotlight検索結果をタップすると、しかし、このメソッドが呼び出されていない取得し、私が得る行動が自分のアプリケーションということのようです動作するようです単にメインインターフェースから始まります。

私のアプリが閉鎖されているときにも動作させるための提案はありますか? 何が起こっているのかをデバッグする方法はありますか(私はデバッガをインストールするためにアプリケーションを実行する必要があるので、検索結果からアプリを開く方法をシミュレートする方法はわかりません)。

+0

理解しましたか?私は同じ問題を抱えています:continueUserActivityが呼び出されています。 – Travis

+0

こんにちは@Travis、下記の私の答えを参照してください:) –

答えて

3

をここでは、あなたのアドバイス、次の完全な答えに従います。あなたがFacebookのSDKを使用している、とdidfinishlaunchingであなたの代わりにプレーンテキストで、FBSDKを戻ってきている、と最後にtrueを返した場合

// In application: didFinishLaunchingWithOptions: 
NSDictionary *activityDic = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey]; 

if (activityDic) { 
    if(self.window.rootViewController){ 
     NSUserActivity * userActivity = [activityDic valueForKey:@"UIApplicationLaunchOptionsUserActivityKey"]; 
     [self.window.rootViewController restoreUserActivityState:userActivity]; 
    } 
} 
29

ニコ、

すべての最初:そこのXcodeからアプリケーションを起動するための方法だと、すぐにそれを開いていない:あなたのスキームのプロパティを開き、「ファイル名を指定して実行」セクションに移動し、「情報」の下に、ありますスイッチは、何が起こっているのかをデバッグするのに役立ちます:

"実行可能ファイルが起動するのを待つ"。

このスイッチを有効にすると、Xcodeからアプリを起動できます.Xcodeはアプリが検索から開かれるまで待ってから、デバッガに接続します。

希望に役立ちます!イワン

+0

本当に有益だったので、本当にありがとうございます:) –

+0

私は可能な場合、私はもっと頻繁にupvoteだろう! – fabb

5

アプリが閉じられた場合は、アプリケーション:continueUserActivity:呼び出されません。代わりに、あなたはすべての情報launchOptionsがアプリケーションにdictionnaryます:didFinishLaunchingWithOptions:

// In application: didFinishLaunchingWithOptions: 
NSDictionary *activityDic = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey]; 
if (activityDic) { 
    // Continue activity here 
} 
18

することは、それがcontinueuseractivityを打つ問題を引き起こす可能性があります。

多くのことを検索し、さまざまな方法を試した後、私はちょうど真 リターンを持っていたし、このコメント:。)

FBSDKApplicationDelegate.sharedInstanceを(アプリケーション(アプリケーション、didFinishLaunchingWithOptions:launchOptions)

+0

これは私のために数時間壁に頭を打った後、予期しない正しい解決策です。 upvoted。 –

+0

おい、偉大なキャッチ。これは私を救った。 – marcshilling

+1

うわー、これは予想外だった。あなたはFacebookのおかげで!確かに大きなキャッチ! –

4

didFinishLaunchingWithOptionsはYESを返す必要があるため、continueUserActivityが呼び出されます。

は、アプリケーションの末尾に追加:didFinishLaunchingWithOptions:あなたはこれを

NSDictionary *activityDictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey]; 
if (activityDictionary) { 
    NSUserActivity *userActivity = [activityDictionary valueForKey:@"UIApplicationLaunchOptionsUserActivityKey"]; 
    if (userActivity) { 
     return YES; 
    } 
} 

return NO; 
+0

'willFinishLaunchingWithOptions' *もまた' YES'を返す必要があります – MeXx

関連する問題