2015-09-20 17 views
10

Sto cercando di utilizzare il riflettore principale per aprire un controller di visualizzazione dai risultati della ricerca di Spotlight.continueUserActivity non chiamata dall'app di ricerca chiusa

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

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

return YES; 
} 

Questo sembra funzionare quando l'applicazione è già in esecuzione in background, ma quando è chiuso e mi toccare la ricerca Spotlight risultato sembra che questo metodo non viene chiamato e il comportamento che ottengo è che la mia domanda inizia semplicemente nell'interfaccia principale.

Hai qualche suggerimento per farlo funzionare anche quando la mia app è chiusa? C'è un modo per eseguire il debug di ciò che sta accadendo (dal momento che ho bisogno di eseguire l'app per ottenere il debugger collegato non so come simulare l'apertura dell'applicazione dal risultato della ricerca) ?.

+0

Hai mai questo numero? Sto avendo lo stesso problema: continueUserActivity viene mai chiamata. – Travis

+0

Ciao @Travis, vedi la mia risposta qui sotto :) –

risposta

3

qui segue la risposta completa dopo i vostri consigli.

// 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

Niko,

prima di tutto: c'è un modo per iniziare la vostra applicazione da Xcode e non aprirlo subito: aprire le proprietà regime, andare alla sezione "correre", e sotto "info", c'è un switch che ti aiuterà a eseguire il debug di ciò che sta accadendo:

"Attendi il lancio dell'eseguibile".

Se si attiva questa opzione, è possibile avviare l'applicazione da Xcode, Xcode attenderà fino a quando l'app non verrà aperta dalla ricerca e quindi verrà allegata al debugger.

Spero che questo aiuti!

Ivan

+0

grazie mille, che è stato davvero utile :) –

+0

sì, avrei inversione più spesso se potessi! – fabb

5

Se l'applicazione è stata chiusa, applicazione: continueUserActivity: non è chiamato. Invece, si ottengono tutti i launchOptions informazione Dictionnary nell'applicazione: didFinishLaunchingWithOptions:

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

Se si utilizza il Facebook SDK, e in didfinishlaunching vostro stanno tornando FBSDK, invece di solo testo, e restituendo vero, alla fine, può causare problemi di colpire continueuseractivity.

Dopo aver cercato un sacco, e cercando modi diversi, ho dovuto ritorno vero e commentare questo:.

FBSDKApplicationDelegate.sharedInstance() applicazione (applicazioni, didFinishLaunchingWithOptions: launchOptions)

+0

questa è una soluzione corretta inaspettata per me, dopo aver sbattuto la testa contro il muro per diverse ore. upvoted. –

+0

Amico, ottima cattura. Questo mi ha salvato. – marcshilling

+1

Wow, questo è stato inaspettato. Accidenti a te Facebook! Grande cattura davvero! –

4

didFinishLaunchingWithOptions deve restituire YES in modo che continui a essere chiamatoUtenteActivity.

Aggiungi alla fine di applicazione: didFinishLaunchingWithOptions:

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

return NO; 
+0

'willFinishLaunchingWithOptions' * inoltre * deve restituire' SÌ' – MeXx

Problemi correlati