Swift:如何从我的应用程序到 iBooks 打开本地 pdf

2023-11-25

我之前是用objective-c的。下面的 Objective C 代码运行良好:

in. h

@property (retain)UIDocumentInteractionController *docController;

并以 .m 为单位

    NSString *path = [[NSBundle mainBundle] pathForResource:@"book" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];


docController = [UIDocumentInteractionController interactionControllerWithURL:targetURL];

if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"itms-books:"]]) {

    [docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];
    NSLog(@"iBooks installed");

} else {

    NSLog(@"iBooks not installed");

}

但现在我尝试使用 swift 打开,这是我的 swift 代码:

      if let path = NSBundle.mainBundle().pathForResource("book", ofType: "pdf") {
        if let targetURL = NSURL.fileURLWithPath(path) {

            let docController = UIDocumentInteractionController(URL: targetURL)
            let url = NSURL(string:"itms-books:");

            if UIApplication.sharedApplication().canOpenURL(url!) {

                docController.presentOpenInMenuFromRect(CGRectZero, inView: self.view, animated: true)

                println("iBooks is installed")

                }else{

                println("iBooks is not installed")
            }

        }
    }

但当我选择 iBooks 打开 pdf 时,它崩溃了。谁能帮我!


我认为 Bojan Macele 有一个很好的答案,我使用了他的代码,我只是认为它需要一些解释。我也遇到了应用程序崩溃的问题。只需确保 docController 是在您想要使用它的函数之外声明的。我在我的类声明下声明了这个变量。

import UIKit

class ViewController: UIViewController {

    var button : UIButton?
    var docController: UIDocumentInteractionController?

    override func viewDidLoad() {
        super.viewDidLoad()
        button = UIButton(frame: CGRectMake(10, 50, 100, 50))
        button?.backgroundColor = UIColor.blackColor()
        self.view.addSubview(button!)
        button?.addTarget(self, action: "buttonPressed:", forControlEvents: UIControlEvents.TouchDown)

    }

    func buttonPressed(sender: UIButton){
        println("button pressed")


        if let path = NSBundle.mainBundle().pathForResource("test", ofType: "pdf") {
            if let targetURL = NSURL.fileURLWithPath(path) {
                docController = UIDocumentInteractionController(URL: targetURL)
                let url = NSURL(string:"itms-books:");
                if UIApplication.sharedApplication().canOpenURL(url!) {
                    docController!.presentOpenInMenuFromRect(CGRectZero, inView: self.view, animated: true)
                    println("iBooks is installed")
                }else{
                    println("iBooks is not installed")
                }

            }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

所以我只是做了一个演示项目来让它工作。就是这个。需要在函数外部声明它的原因是为了内存管理问题。一旦程序到达buttonPressed的末尾,它就不再知道docController是什么。然后,它尝试使用 docController 打开 iBooks,这是一个非持久变量,因此它崩溃了。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift:如何从我的应用程序到 iBooks 打开本地 pdf 的相关文章

随机推荐

  • Git 大提交最佳实践

    我正在使用 git 上周我在本地存储库上进行了大量工作 我喜欢进行许多小提交 例如 2 或 3 个文件 而不是大提交 但这一次由于时间压力和更改涉及许多文件 我有很多文件未暂存 我的问题是 这种情况下的最佳实践是什么 有没有什么工具可以让我
  • 如何制作一个在 IE 和 Firefox 中都有效的 file:// 超链接?

    在我的文档网页中 我经常需要提供指向存储在 Intranet 上的位置 文件和应用程序 xbap 的链接 在 IE 中 这对于格式如下的 URL 来说效果很好 a href Go to folder a a href Download fi
  • 如何为 UITextField 中的占位符文本设置可访问性特征?

    我正在检查我们的 iOS 应用程序来解决辅助功能问题 该应用程序的功能之一是 UITextField 用户可以在其中输入搜索查询 我将该字段的特征设置为 搜索字段 并且 VoiceOver 大部分时间都对该字段做得很好 当字段中有文本时 它
  • 按列而不是按行对结果进行排序

    SQL中可以按列排序而不是按行排序吗 我不需要基本的 ORDER BY 语句 我知道它们是如何工作的 即 按列 1 列 2 等排序 基本上尝试对这样的事情进行排序 column 1 column 2 column 3 1 0 3 尝试对此进
  • 如何检测用户是否启用了 Mac OS 高对比度辅助功能设置?

    我有一个 React TypeScript 项目 我试图检测用户是否启用了任何 Mac OS 的高对比度辅助功能设置 反转颜色 使用灰度 区分无颜色 增加对比度或增加的显示对比度设置 我想使用 JavaScript TypeScript 检
  • Windows 汇编堆和堆栈?

    操作系统 Windows 7 32位 所以像c 一样 有一个堆和一个堆栈 但我最近开始进行一些汇编学习 但没有看到任何类似的东西 只有一个堆栈 但它看起来就像纯粹的内存 那么堆和栈的实现是特定于 C 和其他语言的吗 或者您仍然在汇编中分配堆
  • 无法将 MyObject 类型的对象转换为 MyObject 类型

    我有这样的场景 我在 C 中使用的 Web 服务方法返回一个 Business 对象 当使用以下代码调用 Web 服务方法时 我在 reference cs 类中收到异常 无法将 ContactInfo 类型的对象转换为 ContactIn
  • Struts 2 s:选择标签动态id

    我在一个 JSP 页面和一个按钮中有多个不同类型的字段 这些字段是根据从我创建的元数据表中获取的信息生成的 由于我不知道存在多少个字段以及什么类型的字段 我给动态id给他们 我在 JSP 中使用 Struts 2 标签 问题在于
  • 如何在 gtk 中设置光标位置 -Linux、MonoDevelop

    好吧 所以我想我会进入 Linux 开发 然而 我发现你很难操纵鼠标和键盘 我的问题是 GTK 不支持这类事情 还是我错过了什么 在 Windows 中很简单 Point Pos new Point 20 20 Cursor Positio
  • LinQ 如何将 1 这样的整数更改为字符串 001

    我的数据库中有一个包含四列的表 string year string weeknr int number 在其他表中 我将这些列组合成yywwnnn作为字符串 数字列是标识列 现在我想从要与上述表连接的表中检索一些记录 就像是 from R
  • 如何在 C++ 中使用 python 库?

    我想使用nltkC 中的库 我可以使用胶水语言 机制来做到这一点吗 原因 我已经有一段时间没有用 C 进行任何认真的编程了 并且想同时修改 NLP 概念 Thanks 尽管从 python 调用 c libs 更为正常 您可以通过基本调用
  • 如何使用python从mp3文件中提取原始数据?

    我有关于使用 Python 进行音频数据分析的作业 我想知道是否有任何好的模块可供我用来从 mp3 文件中提取原始数据 我的意思是原始数据 而不是元数据 id3 标签 我知道如何使用wave要处理的模块 wav文件 我可以readframe
  • 带点的 DataTable 列名称为何不适合 WPF 的 DataGrid 控件?

    运行这个 你会感到困惑
  • 使用 PyQt4 进行核心转储

    我从 PyQt4 开始 在最简单的示例中使用 QGraphicsScene View 时面临核心转储 usr bin python import sys from PyQt4 QtCore import from PyQt4 QtGui i
  • Plotly Dash 表回调

    我试图让滑块 用户输入和表格之间的依赖关系发挥作用 我尝试输出数据并使用回调来更新它 建议我只在回调中创建表并使用 Div 定义其在显示中的位置 其他信息 表是使用 dash table 库从 pandas DataFrame 创建的 数据
  • $?VAR 在 csh 中意味着什么?

    我遇到过用 csh 编写的这段代码 if LM LICENSE FILE then setenv LM LICENSE FILE LmLicense else switch LM LICENSE FILE case LmLicense br
  • 通过 html 按钮更改变量

    我正在学习 javascript 我决定创建简单的石头剪刀布游戏 我想让它可以通过按钮控制 所以我用html做了这个 div div
  • 如何使用 UIWebView 加载包含哈希片段“#”的 NSURL?

    给定一个本地 URL 地址 例如 index html 现在我需要使用UIWebView将其加载到 iPad 中 我按照以下步骤操作 创建 NSURL NSURL url NSURL fileURLWithPath http mysite
  • 如何使用 xQuery 对转义的 XML 进行取消编码

    我在 xQuery 中有一个类型为 xs string 的变量 其值为编码的 HTML 片段 twitter 推文的内容 它看起来像这样 今日头条美联社来源 b 奥巴马 b 挑选 司法职位撤回 新闻 休息 世界 http shar es m
  • Swift:如何从我的应用程序到 iBooks 打开本地 pdf

    我之前是用objective c的 下面的 Objective C 代码运行良好 in h property retain UIDocumentInteractionController docController 并以 m 为单位 NSS