有没有一种方法可以防止NSFilemanger导出数据和创建文件夹?

时间:2019-08-22 15:40:14

标签: ios swift nsfilemanager file-manager

每当用户导出数据(它是JSON格式)时,它都会创建一个名为“文档”的文件夹。并且不会直接导出文件,而是为我的JSON导出和CSV进行的。

我曾经尝试更改fileManager设置,但似乎没有任何尝试,其中包括更改默认值for和in。后两者是我调用fileManger.url

这是我的JSON主要导出

// MARK: - Export to Share
    func toExportJSON() {
        // Call to clear Chached exported files
        clearAllFile()
        var exportArrayJson = [exportJsonData]()

        var exportArray = [Item]()
        exportArray = fetchedRC.fetchedObjects!

        for i in exportArray {

            let newI = exportJsonData(name: i.name!, pricePer: i.pricePer, totalPrice: i.totalPrice!, isComplete: i.isComplete, Qty: i.quantity, Cat: i.catagory!, Priority: i.priority, DNH: i.didHave)

            exportArrayJson.append(newI)
        }

        let encoder = JSONEncoder()
        encoder.outputFormatting = .prettyPrinted
        encoder.keyEncodingStrategy = .convertToSnakeCase

        var jsonDataTop = Data()
        do {
            let jsonData = try encoder.encode(exportArrayJson)
            jsonDataTop = jsonData

        // Old Code to print for testing
        ///if let jsonString = String(data: jsonData, encoding: .utf8) {
            ///print(jsonString)
            ///print(jsonData)
        ///}

            let fileManager = FileManager.default
            do {

                let path = try fileManager.url(for: .documentDirectory, in: .allDomainsMask, appropriateFor: nil, create: false)
                let fileURL = path.appendingPathComponent("\(detailedList.lname!).json")
                try jsonDataTop.write(to: fileURL)//.write(to: fileURL)//write(to: fileURL, encoding: .utf8)

                let vc = UIActivityViewController(activityItems: [path], applicationActivities: [])

                present(vc, animated: true, completion: nil)
            } catch {
                print("error creating file")
            }
        } catch {
            print(error.localizedDescription)
        }
    }

我希望这能通过JSON本身而不是在文件夹中导出JSON。我只需要文件,以便用户共享。

1 个答案:

答案 0 :(得分:0)

无论您将文件保存在何处,UIActivityViewController完成后都应将其删除。您可以设置完成处理程序以删除文件。

vc.completionWithItemsHandler = { (_, _, _, _) in
    try? fileManager.removeItem(at: fileURL)
}

另一种选择是将文件保存在temporaryDirectory中而不是文档中。

let fileURL = path
    .temporaryDirectory
    .appendingPathComponent("\(detailedList.lname!).json")

但是您仍然应该在之后删除该文件。