UIDocumentInteractionController显示空白pdf

时间:2014-08-21 15:19:47

标签: ios pdf swift uidocumentinteraction

我正在尝试使用UIDocumentInteractionController presentPreviewAnimated方法在iOS设备上显示pdf,但它会一直显示空白文档。我认为它可能与字符编码有关,但我不确定。如果我使用UIWebView,我可以显示pdf,而不是文档交互控制器。

//更新9/18/14 现在正在与Xcode 6的GM版本一起使用。

//更新2014年8月22日

奇怪的是,从DocumentInteractionController,如果我点击右上角的“打开方式”图标并选择类似iBooks的内容,则pdf会正确显示。似乎只是预览不想在屏幕上显示它。

这是我的代码(在Swift中):

// data is coming in as NSISOLatin1StringEncoding
func displayPdfInUIDocumentInteractionController(data: NSData) {

    let fileName = NSTemporaryDirectory().stringByAppendingPathComponent("myFile.pdf")
    let url: NSURL! = NSURL(fileURLWithPath: fileName)

    // this does not seem to make a difference
    // let pdfString = NSString(data: data, encoding: NSISOLatin1StringEncoding)
    // pdfString.writeToURL(url!, atomically: true, encoding: NSISOLatin1StringEncoding, error: nil)

    data.writeToURL(url, atomically: true)
    if url != nil {
        let docController = UIDocumentInteractionController(URL: url)
        docController.UTI = "com.adobe.pdf"
        docController.delegate = self
        docController.presentPreviewAnimated(true)
    }
}

此代码确实正确显示了pdf:

// data is coming in as NSISOLatin1StringEncoding
func displayPdfInUIWebView(data: NSData) {

    let rect = UIScreen.mainScreen().bounds
    let screenSize = rect.size

    let webView = UIWebView(frame: CGRectMake(0,0,screenSize.width,screenSize.height))
    webView.autoresizesSubviews = true
    webView.autoresizingMask = (UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth)

    webView.loadData(data, MIMETYype: "application/pdf", textEncodingName: "ISO-8859-1", baseUrl: nil)

    self.view.addSubview(webView)
}

有没有理由第一个功能不起作用?它不会出错,只显示一个空白页面。

2 个答案:

答案 0 :(得分:1)

我没有使用Swift,但直接使用Objective-C我的问题基本相同。在iOS8之前,我的UIDocumentInteractionController几乎显示了我投入的每种文件类型,包括PDF。但在iOS8中,PDF文件将不再显示给我。

我是这样创造的:

[[[UIDocumentInteractionController alloc] init] autorelease]

我更改了调用以创建它:

[UIDocumentInteractionController interactionControllerWithURL:myUrl]

现在我的PDF文件再次显示(其他的看起来还是可以的)。

答案 1 :(得分:0)

这与Xcode的GM版本一起使用。猜猜这只是一个错误。