将PDFDocument作为NSData保存到CoreData(如何将其转换为NSData?)

时间:2018-05-19 11:09:46

标签: ios swift

所以这可能是一个微不足道的问题,但我无法让它发挥作用。 我将pdf file保存到CoreData后将其保存到视图中(使用IOS'Drag&Drop功能)

func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {
        session.loadObjects(ofClass: ComicBookPDFDocument.self) { (pdfItems) in
            let items = pdfItems as! [ComicBookPDFDocument]

            // "Cannot assign value of type 'ComicBookPDFDocument' to type 'NSData?'"
            self.file.data = items[0]
        }
}

ComicBookPDFDocument只是子类PDFDocument,使其符合NSItemProviderReading

final class ComicBookPDFDocument: PDFDocument, NSItemProviderReading {

    public static var readableTypeIdentifiersForItemProvider: [String] {
        return [kUTTypePDF as String]
    }

    public static func object(withItemProviderData data: Data, typeIdentifier: String) throws -> ComicBookPDFDocument {
        return ComicBookPDFDocument(data: data)!
    }
}

但是,我从XCode得到了这个编译错误:

  

无法指定'ComicBookPDFDocument'类型的值来输入'NSData?'

如何保存PDFDocument的pdf数据?我在互联网或文档上找不到任何东西。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

好的,我不知道我是怎么错过的,但现在是:

items[0].dataRepresentation()

答案 1 :(得分:0)

你做了一件事,

尝试将PDF保存到文档目录中,并将其路径保存在Core-Data中。

以下是保存到Document目录并从文档目录中获取的代码

class PDCache: NSObject {

static let sharedInstance = PDCache()

func saveData(obj: Data, fileName: String){

    let filename = getDocumentsDirectory().appendingPathComponent("\(fileName).pdf")
    do{
        try obj.write(to: filename, options: .atomic)
    } catch{
        print(error.localizedDescription)
    }
}

func getData(fileName: String) -> URL?{
    let fileManager = FileManager.default
    let filename = getDocumentsDirectory().appendingPathComponent("\(fileName).pdf")
    if fileManager.fileExists(atPath: filename.path){
        return URL(fileURLWithPath: filename.path)
    }
    return nil
}

private func getDocumentsDirectory() -> URL {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    return paths[0]
}
}

要保存数据,请使用此

    let data = Data()
    self.saveData(obj: data, fileName: "myPdfFile")

并获取文件网址

let pdfUrl = self.getData(fileName: "myPdfFile")

试试这个,让我知道它是否适合你。