![](/img/trans.png)
[英]iOS - Attempt to insert non-property list object NSDictionary in NSUserDefaults
[英]Attempt to insert non-property list object error while storing dictionary in userdefaults
我有一個類型為[Int: [Int]]
的字典,我想將它存儲在用戶默認值中。 字典的鍵是這樣的: 1100110004
和值:
[1,2,0,0]
但我得到了這個錯誤:
嘗試插入非屬性列表 object {\n 1100110004 = (\n 1,\n 2,\n 0,\n 0\n );\n} for key visibleChart1100110004"
這是我的代碼:
let userDefaults = UserDefaults.standard
private lazy var visibleChartDictionary = [Int: [Int]]()
在 function 中:
visibleChartDictionary = [id : convertChartTypetoInt(chartType: visibleCharts)]
chartUserDefaults.set(visibleChartDictionary, forKey: "visibleChart\(id)")
這里有一個 function 將數據 model 轉換為 Int (我讀到我無法在用戶默認值中存儲數據 model 類型)
func convertChartTypetoInt(chartType:[ChartType]) -> [Int] {
var chartTypeInt: [Int] = [0, 0 , 0, 0]
let ecgNumber = 1
let respiratoryNumber = 2
let bodyTempNumber = 3
let activityNumber = 4
//ecg
if let index = chartType.firstIndex(where: {$0 == .ecg}) {
chartTypeInt.remove(at: index)
chartTypeInt.insert(ecgNumber, at: index)
}
//respiratory
if let index = chartType.firstIndex(where: {$0 == .respiratory}) {
chartTypeInt.remove(at: index)
chartTypeInt.insert(respiratoryNumber, at: index)
}
//body temp
if let index = chartType.firstIndex(where: {$0 == .bodyTemp}) {
chartTypeInt.remove(at: index)
chartTypeInt.insert(bodyTempNumber, at: index)
}
//activity
if let index = chartType.firstIndex(where: {$0 == .activity}) {
chartTypeInt.remove(at: index)
chartTypeInt.insert(activityNumber, at: index)
}
return chartTypeInt
}
有人可以幫我嗎?
用戶默認值是一個屬性列表。 屬性列表字典必須有字符串鍵。
您始終可以測試將某些內容直接放入用戶默認值的資格,如下所示:
let d : [Int:[Int]] = [1100110004 : [1,2,0,0]]
do {
let data = try PropertyListSerialization.data(
fromPropertyList: d, format: .binary, options: 0)
} catch { print(error) }
一個簡單而明顯的解決方案:您的d
是可編碼的,因此將其編碼為屬性列表並將生成的數據 object 存儲在用戶默認值中。
let d : [Int:[Int]] = [1100110004 : [1,2,0,0]]
do {
let data = try PropertyListEncoder().encode(d)
// and store `data` in user defaults
} catch { print(error) }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.