2015-09-20 3 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; 
} 

Это похоже на работу, когда приложение уже работает в фоновом режиме, однако, когда она закрыта, и я нажимаю на поиск прожектора результат, кажется, что этот метод получает не вызывается и поведение, я получаю, что мое приложение просто начинается в основном интерфейсе.

Есть ли у вас какие-либо предложения по его созданию, когда мое приложение закрыто? Есть ли способ отладить то, что происходит (так как мне нужно запустить приложение, чтобы подключить отладчик, я не знаю, как имитировать открытие приложения из результата поиска) ?.

+0

Вы когда-нибудь понять это? У меня такая же проблема: continueUserActivity когда-либо называется. – Travis

+0

Привет @Travis, см. Мой ответ ниже :) –

ответ

3

Здесь следует полный ответ следующий ваши советы.

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

первую очередь

: есть способ, чтобы начать свое приложение с Xcode и не открывать его сразу: откройте свойства схемы, перейдите в раздел «Выполнить» и в разделе «Информация», есть переключатель, который поможет вам отладить то, что происходит:

«Подождите, пока исполняемый файл будет запущен».

Если вы активируете этот переключатель, вы можете запустить приложение из Xcode, Xcode будет ждать, пока приложение будет открыто из поиска, а затем оно присоединяет к нему отладчик.

Надеюсь, что это поможет!

Иван

+0

Большое вам спасибо, это было действительно полезно :) –

+0

Да, я бы повышал чаще, если бы мог! – fabb

5

Если приложение было закрыто, приложение: continueUserActivity: не называется. Вместо этого, вы получите всю информацию launchOptions dictionnary в приложения: didFinishLaunchingWithOptions:

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

Если вы используете Facebook SDK, и в didfinishlaunching ваш возвращаются FBSDK, вместо обычного текста, и возвращает истину в конце концов, это может вызвать проблемы удара continueuseractivity.

После поиска много, и пытаются разными способами, я просто должен был вернуться верно и комментировать это:.

FBSDKApplicationDelegate.sharedInstance() заявление (приложение, didFinishLaunchingWithOptions: launchOptions)

+0

это неожиданное правильное решение для меня, после того как я ударился головой о стену в течение нескольких часов. upvoted. –

+0

Чувак, большой улов. Это спасло меня. – marcshilling

+1

Вау, это было неожиданно. Черт бы тебя побрал! Отличная игра! –

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

Смежные вопросы