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];
}
}