gpt4 book ai didi

ios - 在 Swift 中将数组保存到文件

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:01 28 4
gpt4 key购买 nike

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

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

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

收到的 JSON 如下所示:

enter image description here

然后我使用下面的代码创建一个字典数组来存储 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
}

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

enter image description here

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

我正在尝试使用这样的方式写入数据:

        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)

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

enter image description here

当我尝试阅读它时:

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

我收到错误:“ fatal error :在展开可选值时意外发现 nil”

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

enter image description here

newDictionary 变量有无数个值。数组中有 40 个字典,写在文件中。

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

最佳答案

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

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

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

关于ios - 在 Swift 中将数组保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32583643/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com