iOS 10开放应用程序正常或带有url

iOS 10开放应用程序正常或带有url,ios,swift,url,Ios,Swift,Url,我正在创建一个带有SplitViewController的iPad应用程序,它应该有两种工作方式 您只需打开应用程序,就会看到主表视图 展示一些作业。这些作业可以是三个作业中的一个 不同类型。您选择了一个作业,并显示一个 使用显示细节序列的细节视图控制器 你点击一个链接 从另一个应用程序中,打开具有id的应用程序,现在应仅 显示与id对应的赋值 我在AppDelegate中具有以下功能: func application(_ application: UIApplication, didFini

我正在创建一个带有SplitViewController的iPad应用程序,它应该有两种工作方式

  • 您只需打开应用程序,就会看到主表视图 展示一些作业。这些作业可以是三个作业中的一个 不同类型。您选择了一个作业,并显示一个 使用显示细节序列的细节视图控制器
  • 你点击一个链接 从另一个应用程序中,打开具有id的应用程序,现在应仅 显示与id对应的赋值
  • 我在AppDelegate中具有以下功能:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        let splitViewController = self.window!.rootViewController as! UISplitViewController
        UIApplication.shared.statusBarStyle = .lightContent
        splitViewController.delegate = self
        splitViewController.preferredDisplayMode = .primaryOverlay
        return true
    }
    
    
    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if let itemid = getQueryStringParameter(url: url.absoluteString, param: "itemid"){
            print(itemid)
            NetworkService().getSpecificExercise(id: itemid) { response, error in
                let exercise = response! as VoiceExercise
                let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
                switch exercise.type {
                case "STRENGTH":
                    print("Strength")
                    let initialViewController : StrengthViewController = storyBoard.instantiateViewController(withIdentifier: "StrengthViewController") as! StrengthViewController
                    initialViewController.exercise = exercise
                    self.window?.rootViewController = initialViewController
                    self.window?.makeKeyAndVisible()
                case "RANGE":
                    print("Range")
                    let initialViewController : RangeViewController = storyBoard.instantiateViewController(withIdentifier: "RangeViewController") as! RangeViewController
                    initialViewController.exercise = exercise
                    self.window?.rootViewController = initialViewController
                    self.window?.makeKeyAndVisible()
                case "COMBINED":
                    print("combined")
                    let initialViewController : CombinedViewController = storyBoard.instantiateViewController(withIdentifier: "CombinedViewController") as! CombinedViewController
                    initialViewController.exercise = exercise
                    self.window?.rootViewController = initialViewController
                    self.window?.makeKeyAndVisible()
                default:
                    print(exercise.type)
                }
    
            }
        }
        return true
    }
    
    我的问题是,如果应用程序尚未启动(即未在后台运行),并且我从另一个应用程序(或通过safari在同一ipad上的测试链接)打开应用程序,则打开url功能不会发生任何事情-它只会显示带有tableview的splitviewcontroller,就像我自己打开了应用程序一样。如果应用程序已经打开,它的行为与预期的一样-显示我预期的任务

    现在这就是我想要的。当您结束作业时,如果应用程序已通过链接打开,则会再次打开另一个应用程序。
    如果我想(当我单击链接打开时)显示分配,但它包含在导航控制器中,该导航控制器包含在splitviewcontroller中,splitviewcontroller的“desiplaymode”设置为.primaryHidden,我将如何操作。我找到的所有教程都只涉及Navigationcontroller,而不包含在splitviewcontroller中。(这仍然只适用于开放式url)

    请添加您的信息。plist,Apple要求您在其中指定要收听的url方案。嗨,Jacob。我已经准备好了。我有一个名为xxxvoicetrainer的URL方案和一个URL标识符。我还建立了一个网站,它的链接形式为:
    ——所有这些都在运行。我想我只是没有在AppDelegated中正确设置它。您正在实现的方法可能在Swift 3中被弃用。试试这个
    application(application:UIApplication,handloopen url:url)->Bool
    我的实现是swift3语法