从内部设备中的json保存数据

时间:2018-05-21 11:06:52

标签: ios swift swift3

我在我的应用中有这个代码:

struct ServerConnect {
    enum Result<T> {
        case succes(T)
        case error(String)
    }

    typealias completionHandler = (Result<Data >) -> ()

    func getJsonFromServer(parameters: String, completion: @escaping completionHandler) {
        let fullUrlString = ApiConstans.fullPath + parameters
        guard let url = URL(string: fullUrlString) else {
            debugPrint("\(ErrorsLabels.ServerConnect01)")
            return completion(.error("\(ErrorsLabels.ServerConnect01)"))
        }

        URLSession.shared.dataTask(with: url) {  (data, response, error) in
            guard error == nil else {
                debugPrint("\(ErrorsLabels.ServerConnect02)")
                return completion(.error("\(ErrorsLabels.ServerConnect02)"))
            }

            guard let data = data else {
                debugPrint("\(ErrorsLabels.ServerConnect03)")
                return completion(.error("\(ErrorsLabels.ServerConnect03)"))
            }

            debugPrint("R> \(fullUrlString)")
            return completion(.succes(data))
            }.resume()
    }


    func getJsonProducts(lang: String?, region: Int?, completion: @escaping completionHandler) {
        self.getJsonFromServer(parameters: "?action=GET_PRODUCTS&lang=\(lang!)&region=\(region!)", completion: completion)
    }

}

我希望使用以下代码将数据保存到我的设备:

let cms = ServerConnect()
cms.getJsonProducts(lang: selectedLanguage, region: selectedRegion , completion: { (data) in
    switch data {
    case .succes(let data):
        self.saveJsonFileToTheDisk(path: selectedLanguage + "/json/temp.json",  downloadData: data)
    case .error(let error):
        self.errorLoginMessage(txt: "\(ErrorsLabels.MainViewControler01). \(error)", title: "Blad".localized())
        break
    }
})


func saveJsonFileToTheDisk(path: String, downloadData: Data){
    do {
        let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        let fileURL = documentsURL.appendingPathComponent(path)
        try downloadData.write(to: fileURL, options: .atomic)
    } catch { self.errorLoginMessage(txt: "\(ErrorsLabels.MainViewControler02). \(error)", title: "Blad".localized()) }
}

不幸的是,应用程序没有将文件保存到磁盘(它甚至不创建它)。我有错误:

  

“文件夹temp.json不存在。   的UserInfo = PNSFilePath =用户/ mymac /库/开发人员......... / JSON / temp.json。   ....没有这样的文件或目录“;

有谁知道这里的问题是什么?

1 个答案:

答案 0 :(得分:0)

您需要实际创建文件夹和文件,然后写入。

下面的代码会检查该文件夹是否存在,如果不存在,则会创建该文件夹。

然后它对文件也一样。

@Singleton