繁体   English   中英

将数组保存到Swift文件中

[英]Save an array to file in Swift

我正在构建一个应用程序,它将:

  1. 检查互联网连接;
  2. 如果服务器可以访问,则从服务器接收JSON文件并将数据存储在文件中;
  3. 如果与服务器的连接断开,则从文件读取。

现在我设法实现连接检查,接收JSON,将数据放入数组。

收到的JSON看起来像这样:

在此输入图像描述

然后我使用以下代码安静来创建一个字典数组来存储JSON数据。 选择了一系列字典,以便能够过滤它,然后使用值的键来达到值。

var rates = [ExchangeRates]()  //instance of class Rate
var bnkDct  =  ["bank": "", "currency": "","buyrate": "", "sellrate": ""] //template
var indx : Int = 0 //index for iteration

            for rate in jsonData{
                let rate = ExchangeRates(data: rate as! NSDictionary)

                rates.append(rate)

                    bnkDct["bank"] = rates[indx].bank
                    bnkDct["buyrate"] = rates[indx].buyRate
                    bnkDct["sellrate"] = rates[indx].sellRate
                    bnkDct["currency"] = rates[indx].currency

                self.bankDict.append(bnkDct)
                indx += 1
            }

在此之后,我有一个看起来像这样的数组:

在此输入图像描述

现在我想将这个数组保存到一个文件中,显然能够读取它。

我试图用这样的东西写数据:

        let filePath = NSTemporaryDirectory() + "MyData.dat"

        self.bankDict.writeToFile(filePath, automatically: true)

但它给了我一个错误:“[(Dictionary)]没有writeToFile成员”。

另外,我不能将它作为NSDictionary转换为使用相同的writeToFile方法。

我还试图用这样的东西写数据:

        let filePath = NSTemporaryDirectory() + "MyData.dat"

        NSKeyedArchiver.archiveRootObject(self.bankDict, toFile: filePath)

它创建一个奇怪的编码文件:

在此输入图像描述

当我试图阅读它时:

 let newDictionary = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as! [Dictionary <String,AnyObject> ]

我收到错误:“致命错误:在展开Optional值时意外发现nil”

调试器也显示非常“有趣”的东西:

在此输入图像描述

newDictionary变量有很多值。 数组中有40个字典是用文件写的。

任何人都可以建议我在这里做错了什么,或者我在这里使用不好的做法?

除非对象图中的每个对象都是属性列表对象,否则不能使用数组或字典writeToFile方法。 (一小部分类型。查找。)

您的数组中有自定义类ExchangeRates。

同样,除非对象图中的每个对象都符合NSCoding协议,否则无法使用NSKeyedArchiver保存文件。 如果您将NSCoding的支持添加到您的ExchangeRates类,那么您的第二种方法将起作用,但文件内容将不是人类可读的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM