[英]Saving an array of dictionary coming from plist , with UserDefaults
我需要使用 UserDefaults 保存我的數組,因為我希望用戶能夠自己添加或刪除行。 我有一個 plist 包含字典行。 我用 plist 上的行填充數組名稱國家,如下所示
var imageList = ["usaflag","gerflag","franceflag","jpflag","gerflag"]
var countries = [Country]()
override func viewDidLoad() {
super.viewDidLoad()
let urlPlist = Bundle.main.url(forResource: "ListinFirstPage", withExtension: "plist")!
let data = try! Data(contentsOf: urlPlist)
do
{
countries = try PropertyListDecoder().decode([Country].self, from: data)
}
catch
{
// Handle error
print(error)
}
savePlaces()
}
現在數組國家包含我的 plist 行。 (充滿行數據並且工作正常)。 我的問題是如何將這個數組保存在 UserDefaults 中,因為它是一個字典數組,看起來有點復雜。 我這樣做就像底部的代碼一樣,但它在應用程序委托中拋出了一個線程。
我在 viewdidload 中添加了這一行來調用 save function
savePlaces()
然后這是我的 savePlaces function
func savePlaces(){
do
{
let placesData = try NSKeyedArchiver.archivedData(withRootObject: countries, requiringSecureCoding: false)
UserDefaults.standard.set(placesData, forKey: "places")
print("Here is save function")
}
catch
{
print("SaveError")
}
}
似乎問題是由於countries
數組,它是來自 plist 的字典數組,因為當我更改此行時
let placesData = try NSKeyedArchiver.archivedData(withRootObject: countries, requiringSecureCoding: false)
對此
let placesData = try NSKeyedArchiver.archivedData(withRootObject: imageList, requiringSecureCoding: false)
我的意思是我將國家更改為 imageList,它是一個字符串數組,它工作正常。 我在第一行定義了圖像列表
var imageList = ["usaflag","gerflag","franceflag","jpflag","gerflag"]
所以問題是countries
,但我不知道為什么,我會非常感謝任何想法
您不能使用NSKeyedArchiver
序列化struct
。
在Country
用Decodable
替換Codable
並使用它來保存數組
func savePlaces()
{
do {
let placesData = try PropertyListEncoder().encode(countries)
UserDefaults.standard.set(placesData, forKey: "places")
} catch {
print(error)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.