Поделиться PDF из NSData через Share Sheet

Файл PDF создается на веб-сервере и принимается как NSData. Swift может распечатать этот объект NSData; однако он не распознается на листе общего доступа другими приложениями, которые обычно принимают PDF-файлы, такими как Google Диск. Единственные параметры, показанные на листе общего доступа, предназначены для печати и копирования.

Я пробовал следующее безрезультатно:

let dataProvider = CGDataProviderCreateWithCFData(pdfObject)
let pdf = CGPDFDocumentCreateWithProvider(dataProvider)
return pdf!

Согласно комментарию sbarow, я также пробовал следующее, но функция retrievePDFFromDisk возвращает ноль:

func writePDFToDisk () {
    var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last! as NSURL
    docURL = docURL.URLByAppendingPathComponent( "myDocument.pdf")
    pdfObject.writeToURL(docURL, atomically: true)
}

func retrievePDFFromDisk () -> AnyObject {
    let pdf = NSBundle.mainBundle().URLForResource("myDocument", withExtension: "pdf")
    return pdf!
}

Как эти данные могут быть правильно объявлены в виде PDF другим приложениям из листа общего доступа?


person Michael Voccola    schedule 09.11.2015    source источник
comment
Запишите NSData на диск с помощью writeToURL:atomically:, а затем используйте путь к файлу для общего доступа.   -  person sbarow    schedule 09.11.2015
comment
Я отредактировал вопрос, чтобы показать подход, который я пробовал в соответствии с вашим предложением; pdf возвращает ноль. Должно быть, что-то упущено при поиске.   -  person Michael Voccola    schedule 09.11.2015
comment
Попробуйте с writeToFile:atomically.   -  person sbarow    schedule 09.11.2015


Ответы (1)


Успех! См. ниже код:

func writePDFToDisk () {
    var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last! as NSURL
    docURL = docURL.URLByAppendingPathComponent( "myDocument.pdf")
    pdfObject.writeToURL(docURL, atomically: true)
}

func retrievePDFFromDisk () -> AnyObject {
    var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last! as NSURL
    docURL = docURL.URLByAppendingPathComponent( "myDocument.pdf")
    return docURL
}

В моем случае это можно упростить до следующего:

func getPDFAsFile (pdfData:NSData) -> AnyObject {
    var docURL = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last! as NSURL
    docURL = docURL.URLByAppendingPathComponent( "myDocument.pdf")
    pdfData.writeToURL(docURL, atomically: true)
    return docURL
}
person Michael Voccola    schedule 09.11.2015