如何在Swift上单击按钮时打开pdf链接?

时间:2016-10-13 16:21:24

标签: ios swift nsurl

我正在尝试从我的Swift应用程序打开pdf,但我无法使其工作。

我知道有很多与此相关的问题,并且在大多数问题中他们使用此代码:

UIApplication.shared.openURL(URL(string: "http://www.url.com" + id)!)

但是我收到以下错误:

  

致命错误:在解包可选值时意外发现nil

所以我认为错误是因为id为零,所以我制作了两个prints来查看检索到的内容:一个用于url,另一个用于id。它们都是正确的,如果我在浏览器导航栏上复制网址,它就能完美运行(我无法提供真实的url,因为它是客户端)。

我将此函数包含在@IBAction内以检测何时单击按钮,以便查看连接是否已断开。这也是正确的。

所以我无法理解为什么会发生这种错误。我花了几个小时但无法弄清楚是什么导致了这个错误。

我错过了什么吗?我应该以某种方式编纂网址吗?

P.S:我正在使用Xcode8Swift3

更新:如果我设置www.google.es,它就能正常运行。使用url中的变量可能会出现问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

最后,在几个小时后搜索问题并遵循@rmaddy的建议(谢谢!)我将功能拆分为三部分,我可以看到URL返回nil值。

这很奇怪,因为我可以将字符串复制到我的浏览器导航栏中并且效果很好所以我认为它可能是关于编码的东西。有一次我编码了它,我注意到在id的最后用\r检索了id的pdf id004.pdf\r 。像这样:

var string = "http://www.url.com" + id
var index1 = string.index(string.endIndex, offsetBy: -1)
var substring1 = string.substring(to: index1)

let encodedString = substring1.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
UIApplication.shared.openURL(NSURL(string: encodedString!) as! URL)

我所做的解决方案如下:

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('currency', null, [
                    'expanded'  => true,
                     'multiple' => true,
                     'label' => 'Currency'
            ])

编码字符串是必要的,因为如果不是,则链接不再起作用。