swift - 如何使用 UIActivityViewController 将我的应用程序中创建的 PDF 文件保存到 iBooks?

标签 swift ios9 xcode7 uiactivityviewcontroller ibooks

我正在我的 ios9 应用程序中创建一个 pdf,并希望能够使用 UIActivityViewController 将其保存到 iBooks。不幸的是,对于我当前使用的代码(假设所有选项都使用:

   applicationActivities: nil 

我可以对文件执行的操作将显示)仅显示“消息”和“邮件”项目。我不排除任何事件,因此假设 UIActivityTypeOpenInIBooks 应该显示得很好。但是,除了消息和邮件之外,我无法获取 iBooks 或其他任何内容。 (为了将来的引用,我将此结果称为结果A)是否有其他推荐的方法来做到这一点? 我正在使用的代码如下:

  // creating pdf image from the UIView
  let pdf = self.getPDFImageFromDrawingView()

  let activityViewController = UIActivityViewController(activityItems: [pdf], applicationActivities: nil) //should include any and all available activities right?

  self.presentViewController(activityViewController, animated: true, completion: nil)

有什么明显的我忘记了吗?如何将 iBooks 作为保存文件的选项?

编辑:

在调试此问题时,我已将 UIView 内容保存为 JPG 和 pdf 文件。当我仅使用生成的 UIImage 时:

(结果 B)

    let image = self.getUIImageFromDrawingView() // generate a UIImage object
    let activityViewController = UIActivityViewController(activityItems: [image], applicationActivities: nil)
    self.presentViewController(activityViewController, animated: true, completion: nil)

所有可能的选项都会显示,包括在 iBooks 中打开(是的!但我需要通过创建 PDF 生成更高分辨率的图像。)

当我将图像和 pdf 添加到 ActivityItems 时(如下所示:

(结果 C)

let image = self.getUIImageFromDrawingView() // UIImage
let pdf = self.getPDFImageFromDrawingView() //produces an NSData object
let activityViewController = UIActivityViewController(activityItems: [image, pdf], applicationActivities:nil)

),我得到了比原始邮件和消息选项更多的选项 - 例如 FB、Pinterest 和 Evernote - 但没有 iBooks。

最后,当我回到仅使用 PDF 时,我得到的内容与以前相同 - 只有邮件和消息。可能是什么原因造成的? (顺便说一句,有趣的是,如果不是没用的话 - 当同时使用 JPG 和 PDF 并使用 Mail 测试 applicationActivities 时 - 我收到了 jpg 和 pdf 的电子邮件,如预期的那样。因此文件正在按预期生成)。

什么可能导致这种奇怪的行为?

编辑 2:

我认为问题可能是我正在使用 NSData 发送 pdf。因此,我将该对象保存为 NSURL 并使用它。我得到了与上面 (C) 相同的结果 - 更多选项,然后只有消息和邮件,但没有 iBooks。使用 UIImage + NSURL 组合以及单独使用 NSURL 时都会得到这个结果。当我单独使用 UIImage 时,我有很多很多选择,就像之前的情况一样,包括 iBooks。

最佳答案

我已经尝试了各种方法,但无法让它与 UIActivityController 一起工作。 然而,当我使用 UIDocumentInteractionController 时,它就像一个魅力:

    let pdfData = self.getPDFasNSData() // get the NSData object
    let fileURL = self.getCurrentPDFURLName() //get the NSURL 

    self.docController = UIDocumentInteractionController(URL: fileURL)

    if (fileURL != nil)
    {
        pdfData.writeToURL(fileURL, atomically: true);         
        self.docController.presentOptionsMenuFromBarButtonItem(self.organizeBarButton, animated: true)
     }

现在“在 iBooks 中打开”选项出现。

关于swift - 如何使用 UIActivityViewController 将我的应用程序中创建的 PDF 文件保存到 iBooks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38944451/

相关文章:

ios - 错误-swift-Tableview-自定义单元格

ios - 单例 VS 静态(类)变量

swift - 快速编程中点击的图像区域的坐标

ios - 我的 Xcode 应用程序图标项目中出现齿轮图标,我无法再运行它

ios - 在 iOS/Mac 上通过 GCD 实现多线程

swift - 哪些版本的 Xcode 支持哪些版本的 Swift?

cocoa-touch - iOS 9 UITextField textRectForBounds 问题

ios - 自定义 TableViewCell 内容在 ios9 xcode7 上不可见

ios - 为什么升级到 XCode 7 后会出现 "HTTP load failed"异常?

angularjs - 最新 XCode 更新后 Ionic Apps 中出现无限摘要循环(仅限 iOS)