在HTTP请求中写入静态字典时获得未捕获的豁免

时间:2019-03-28 16:59:51

标签: swift dictionary

我在与字典相关的http闭包中获得了Uncaught豁免,并声明存在未捕获的豁免。当我设置断点豁免时,它指向一个字典。有问题的字典在结构中声明为静态var,并且其中已经有多个值,这怎么发生?这是http请求。

 session.dataTask(with: request){ (data, response, error) in
            if let data = data,
                let tile = UIImage(data: data),
                let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first{
                let fileName = Date().timeIntervalSince1970
                let filePath = documentsURL.appendingPathComponent(String(describing: fileName))


                Maps.tileCachePath[url] = fileName  //<- this is where the exception happens


                //make sure there is no old file and if so delete it
                if FileManager.default.fileExists(atPath: filePath.path){
                    do {
                        try FileManager.default.removeItem(at: filePath)

                    } catch{
                        print("error deleting old tile")
                    }

                }

                //now write the new file
                FileManager.default.createFile(atPath: filePath.path, contents: data, attributes: nil)
                print(filePath.path)
                //return
                result(tile, error)

            } else {
                result(nil, error)
            }


            }.resume()

2 个答案:

答案 0 :(得分:0)

这是一个错字

替换

Maps.tileCachePath[url] = fileName

使用

Maps.tileCachePath[url] = filePath

基本上Date().timeIntervalSince1970作为文件名是一个非常糟糕的主意。该数字包含小数秒,被视为文件扩展名。

使用更可靠的文件名(如格式化日期),或至少删除小数秒并添加 real 文件扩展名。

答案 1 :(得分:0)

Date()。timeIntervalSince1970 是双精度型,您可能需要在其中输入字符串值。