self.fetchMin(forStartDate: start, toEndDate: end) { (min, chal) in
guard let mins = min, let challenges = chal else {
return
}
let dict: [Int : [String]] = [mins:challenges]
UserDefaults.standard.set(dict, forKey: "WeekStates")
}
嗨,在上面的程序中,我尝试在userDefaults中存储键和数组字符串,但如果我这样做,它会意外崩溃。
如果我尝试使用一个值,它的工作原理。
例如:
`let dict: [String] = challenges
UserDefaults.standard.set(dict, forKey: "WeekStates")
答案 0 :(得分:2)
https://developer.apple.com/documentation/foundation/userdefaults
UserDefaults类提供了便于访问的方法 常见类型,例如浮点数,双精度数,整数,布尔值和URL。一个 默认对象必须是属性列表 - 即(或for的实例) 集合,实例的组合):NSData,NSString, NSNumber,NSDate,NSArray或NSDictionary。如果你想 存储任何其他类型的对象,通常应将其存档到 创建NSData的实例。有关详细信息,请参阅首选项和 设置编程指南。
你可以这样做。
let dict: [Int : [String]] = [1:["iOS Dev"]]
UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: dict as NSDictionary) as NSData, forKey: "4WeekStates")
if let unarchivedObject = UserDefaults.standard.object(forKey: "4WeekStates") as? Data {
let dic = NSKeyedUnarchiver.unarchiveObject(with: unarchivedObject as Data) as? NSDictionary
print(dic!)
}
答案 1 :(得分:0)
正如你在上一次提到的那样,我试过[String]
它有效。
我不确定您是否可以存储类似[Int : [String]]
类型的数据,据我所知UserDefaults
属性列表只能接受某些类型的变量,因此它具有此限制。您可以存储以下类型的变量:
Array
Data
Date
Dictionary
NSNumber
String