簡體   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