何时/啥/为啥/如何在应用程序(应用程序:willFinishLaunchingWithOptions :) 中使用来自 launchOptions 的 UIApplicationOptionsURL

Posted

技术标签:

【中文标题】何时/啥/为啥/如何在应用程序(应用程序:willFinishLaunchingWithOptions :) 中使用来自 launchOptions 的 UIApplicationOptionsURLKey 的值?【英文标题】:When/What/Why/How to use value of UIApplicationOptionsURLKey from launchOptions in application(application:willFinishLaunchingWithOptions:)?何时/什么/为什么/如何在应用程序(应用程序:willFinishLaunchingWithOptions :) 中使用来自 launchOptions 的 UIApplicationOptionsURLKey 的值? 【发布时间】:2016-04-11 01:34:41 【问题描述】:

背景

刚开始学习苹果的API,现在正在学习UIApplicationDelegate的功能。 更具体地说,我正在剖析func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool


问题

可以在launchOptions 中找到的密钥是UIApplicationLaunchOptionsURLKey此密钥何时存在?

对应key,有一些值。 这个值是什么?

我得到这个键值对是有原因的。 我为什么要使用它?

最后,也是最重要的:如何使用它?


附加信息

据我所知,我正在制作一个样板项目。 这是里面的内容:

func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool
    
        print("application(application:willFinishLaunchingWithOptions:)")

        if let options: [NSObject: AnyObject] = launchOptions
        
            for option: (key: NSObject, AnyObject) in options
            
                switch option.key
                
                // The presence of this key indicates that the app was launched in order to open a URL. The value of this key is an NSURL object containing the URL to open.
                case UIApplicationLaunchOptionsURLKey:
                    <#code#>
                ...

对于未来的项目,我计划将 &lt;#code#&gt; 替换为其他东西,以利用 UIApplicationLaunchOptionsURLKey 的键值对的功能。

【问题讨论】:

我会在最后改写这个问题,因为你真的可以在那里放任何东西。 @TroyT -- 好点。我已经将问题编辑成一个声明,因为我真的已经在帖子前面提出了我真正想要回答的问题。 【参考方案1】:

可能还有其他原因,但我用它来用我的应用打开特定文件。

我的应用程序以自己的格式保存备份文件。如果用户在他的设备中有这些文件之一,他可以选择使用我的应用程序打开文件。如果他这样做,我的应用程序就会打开并且会发生这种情况:

func application(application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
        if let url = launchOptions?[UIApplicationLaunchOptionsURLKey] as? NSURL 
            handleBackupFile(url)
        
        return true

除了通常启动应用程序之外,我调用handleBackupFile() 来处理备份文件。

如果我的应用可以打开不止一种文件,我可能会检查那里的文件类型。

编辑:

这是我的应用 Leio 的一个实际示例:

当用户点击“复制到 Leio”时,我的应用会打开并调用该代码。

【讨论】:

您能否澄清一下在用户体验期间这意味着什么:是当他们选择“打开方式...”并选择您的应用程序时,还是什么?另外,这个 URL 看起来如何? 我不确定这是否算作题外话:我假设您的应用程序没有被称为“复制到 Leio”,可能只是“Leio”。如果是这样,您在哪里有机会让应用图标下的文本显示“复制到 Leio”而不是“Leio”? 而url是文件系统目录中文件路径的url。在我的示例中,文件作为附件保存在便笺中,因此目录可能是便笺应用程序附件的路径加上文件名,在本例中类似于 notesPath/leio_04etc.lbf 这是与UIApplicationLaunchOptionsURLKey对应的值的URL吗? 是的。而且我根本没有设置该文本,因为它会让我对本地化感到头疼,所以这是默认文本。您可能可以在某处更改它,但现在我不确定在哪里,也许当您设置您的应用可以打开哪些文件时。

以上是关于何时/啥/为啥/如何在应用程序(应用程序:willFinishLaunchingWithOptions :) 中使用来自 launchOptions 的 UIApplicationOptionsURL的主要内容,如果未能解决你的问题,请参考以下文章

Java 日志级别 - 何时使用啥

究竟啥是核心文件,它为啥有用?

为啥以及何时需要在 React 中绑定函数和事件处理程序?

在 IIS 中,“应用程序”和“会话”有啥区别?

Windows 线程何时需要消息循环,为啥?

你啥时候以及为啥要封课?