如何在Swift中将NSData写入新文件?

时间:2016-08-17 02:05:16

标签: ios json swift xcode nsdate

我正在努力将NSData实例的内容写入文件。我目前正在使用Xcode游乐场。

这是我的代码:

let validDictionary = [
    "numericalValue": 1,
    "stringValue": "JSON",
    "arrayValue": [0, 1, 2, 3, 4, 5]
]

let rawData: NSData!


if NSJSONSerialization.isValidJSONObject(validDictionary) {
    do {
        rawData = try NSJSONSerialization.dataWithJSONObject(validDictionary, options: .PrettyPrinted)
        try rawData.writeToFile("newdata.json", options: .DataWritingAtomic)
    } catch {
        // Handle Error
    }
}

我有一个名为newdata.json的文件位于资源中但是当我检查它时,里面什么都没有。我也尝试删除并查看是否会创建该文件但它仍然无法正常工作。

3 个答案:

答案 0 :(得分:1)

您的代码是正确的,但文件未写入您期望的位置。 Swift Playgrounds是沙箱,文件位于系统的另一部分,而不是项目的资源文件夹中。

您可以通过立即尝试从中读取来检查文件是否实际被保存,如下所示:

3

来自Tom的评论如下:具体来说,该文件位于某个地方,如let validDictionary = [ "numericalValue": 1, "stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5] ] let rawData: NSData! if NSJSONSerialization.isValidJSONObject(validDictionary) { // True do { rawData = try NSJSONSerialization.dataWithJSONObject(validDictionary, options: .PrettyPrinted) try rawData.writeToFile("newdata.json", options: .DataWritingAtomic) var jsonData = NSData(contentsOfFile: "newdata.json") var jsonDict = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: .MutableContainers) // -> ["stringValue": "JSON", "arrayValue": [0, 1, 2, 3, 4, 5], "numericalValue": 1] } catch { // Handle Error } }

答案 1 :(得分:1)

如果您使用的是Xcode 8,那么有更好的方法。

首先,在名为$('#myDiv').on('mouseenter', function() { $(this).animate({ left: "+=10px", top: "+=10px" }); }); $('#myDiv').on('mouseleave', function() { $(this).animate({ left: '-=10px', top: '-=10px' }); }) 的{​​{1}}文件夹中创建一个目录。

接下来,在您的操场上导入游乐场支持:

Documents

最后,在文件网址中使用Shared Playground Data。它将指向上面创建的文件夹:

import PlaygroundSupport

然后,您可以在游乐场中读取/写入该URL,并且(更容易)检查您正在保存的文件。这些文件将位于您在上面创建的playgroundSharedDataDirectory文件夹中。

答案 2 :(得分:1)

使用以下扩展名:

extension Data {

    func write(withName name: String) -> URL {

        let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(name)

        try! write(to: url, options: .atomicWrite)

        return url
    }
}