【问题标题】:How to handle "open in" retrieved file with swift 2如何使用 swift 2 处理“打开”检索文件
【发布时间】:2016-02-15 23:53:34
【问题描述】:

我正在尝试构建一个非常简单的应用程序,它使用标准的 http 请求将文件上传到我们的服务器。

我希望该应用程序成为某种能够打开电子邮件附件的中心。 成功了,我将信息添加到 info.plist。

现在该文件已成功发送到我的应用程序(例如 pdf 文件)...

如何检索该文件 url 以在 webview 中显示它?我用谷歌搜索了几个小时,似乎是通过 appDelegate,但我不知道它是如何继续的......

刚刚找到这段代码,现在我被卡住了(甚至不知道它是否真的有效!)

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {

    let dictionary = NSDictionary(contentsOfURL: url)

    return true

}

非常感谢任何帮助我指出正确方向的帮助!我从 5 天前开始使用 swift,请温柔 ;)

【问题讨论】:

  • 所以您正在尝试打开 PDF 以在 UIWebView 中查看,对吗?此文件是在设备上还是在您的服务器上?
  • 两者都不是,它来自另一个应用程序(所以可能在设备上,但不是我的应用程序本地存储)。
  • 当您在电子邮件中打开 pdf 文件时,您可以选择“打开方式”。然后我选择我的应用程序,这就是我现在卡住的地方!
  • 啊啊啊。好的,我现在明白了。

标签: swift pdf content-type


【解决方案1】:

我没有测试过这个,但看起来你想要做的是这样的:

  1. 转到您的项目设置
  2. 转到“信息”标签
  3. 在“文档类型”下添加您想要支持的文档类型
  4. 要获取添加的文件,您需要在您的应用程序的Documents/Inbox 文件夹中查找,如下所示:
let filemgr = NSFileManager.defaultManager()
let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
let inboxPath = documentsDirectory.stringByAppendingPathComponent("Inbox")
do {
    let dirFiles = try filemgr.contentsOfDirectoryAtPath(inboxPath)
} catch {
    //Handle error
}

我不确定传递给application:openURL:sourceApplication:annotation: 的确切内容,但它可能有助于检查打开了哪个文件。

另外,直接来自Apple

使用此目录可以访问外部实体要求您的应用打开的文件。具体来说,Mail 程序将与您的应用程序关联的电子邮件附件放置在此目录中。文档交互控制器也可以在其中放置文件。

您的应用可以读取和删除此目录中的文件,但无法创建新文件或写入现有文件。如果用户尝试编辑此目录中的文件,您的应用必须在进行任何更改之前静默地将其移出目录。

此答案改编自this tutorial (part 2 & part 3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2015-01-09
    • 2011-10-21
    • 1970-01-01
    • 2012-05-24
    • 2022-08-16
    相关资源
    最近更新 更多