continueUserActivity未从搜索关闭应用程序调用

时间:2015-09-20 10:00:39

标签: ios xcode ios9 user-activity corespotlight

我正在尝试使用核心聚光灯从聚光灯搜索结果中打开视图控制器。

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

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

return YES;
}

当应用程序已经在后台运行时,这似乎有效,但是当它关​​闭时我点击聚光灯搜索结果似乎没有调用此方法,我得到的行为是我的应用程序只是在主界面。

关于我的应用关闭时,您有什么建议可以让它工作吗? 有没有办法调试正在发生的事情(因为我需要运行应用程序以连接调试器我不知道如何从搜索结果模拟应用程序打开)?。

8 个答案:

答案 0 :(得分:35)

尼科,

首先:有一种方法可以从Xcode启动您的应用程序,而不是立即打开它:打开您的计划属性,转到"运行"部分,以及" info",有一个开关,可以帮助您调试发生的事情:

"等待可执行文件启动"。

如果你激活了这个开关,你可以从Xcode启动应用程序,Xcode将等到应用程序从搜索中打开,然后它会将调试器附加到它。

希望有所帮助!

伊万

答案 1 :(得分:21)

如果您使用的是Facebook SDK,并且在didfinishlaunching中,您正在返回FBSDK,而不是纯文本,并在最后返回true,则可能会导致问题continueuseractivity

经过大量的搜索,并尝试不同的方式,我只需要 返回true并对此进行评论:

  

FBSDKApplicationDelegate.sharedInstance()。application(application,didFinishLaunchingWithOptions:launchOptions)

答案 2 :(得分:8)

didFinishLaunchingWithOptions需要返回YES,因此将调用continueUserActivity。

添加到应用程序结束:didFinishLaunchingWithOptions:

NSDictionary *activityDictionary = launchOptions[UIApplicationLaunchOptionsUserActivityDictionaryKey];
if (activityDictionary) {
    NSUserActivity *userActivity = activityDictionary[UIApplicationLaunchOptionsUserActivityTypeKey];
    if (userActivity) {
        return YES;
    }
}

return NO;

答案 3 :(得分:6)

如果应用已关闭,则不会调用application:continueUserActivity:。相反,您可以在应用程序中获取所有信息launchOptions dictionnary:didFinishLaunchingWithOptions:

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

答案 4 :(得分:5)

在新的Swift 5中,有一个名为SceneDelegate.swift的新文件。 使用方法scene(_ scene: UIScene, continue userActivity: NSUserActivity)

答案 5 :(得分: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];
    }
}

答案 6 :(得分:0)

打开Firebase的动态链接时出现类似问题。 在我的情况下,问题在于调用已更改,这就是我在旧代码中所拥有的,不再被调用:

func application(_ application: UIApplication, 
                   continue userActivity: NSUserActivity, 
                   restorationHandler: @escaping ([Any]?) -> Void) -> Bool

这是在我的情况下有效的电话:

func application(_ application: UIApplication, 
                   continue userActivity: NSUserActivity, 
                   restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool

请注意呼叫的确切编写方式。不要被Xcode建议添加private的警告所欺骗-这将无济于事。

答案 7 :(得分:0)

A12345678在最新的快速版本中进行了更改。更换功能对我有用。

continue userActivity

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool