continueUserActivity не вызывается из закрытого приложения поиска

Я пытаюсь использовать core spotlight для открытия контроллера вида из результатов поиска spotlight.

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

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

return YES;
}

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

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

5 ответов


Нико

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

"дождитесь запуска исполняемого файла".

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

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

Иван


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

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

FBSDKApplicationDelegate.sharedInstance().применение (применение, didFinishLaunchingWithOptions: launchOptions)


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

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

didFinishLaunchingWithOptions должен вернуть да, поэтому continueUserActivity будет вызван.

добавить в конец приложения: didFinishLaunchingWithOptions:

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

return NO;

здесь следует полный ответ, следуя вашим советам.

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

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