得到错误在尝试存储诠释,arrayof [字符串]一对userDefaults

问题描述:

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键和阵列对字符串的,但如果我这样做是意外崩溃。得到错误在尝试存储诠释,arrayof [字符串]一对userDefaults

如果我尝试一个值,它的工作。

如:

`let dict: [String] = challenges 
UserDefaults.standard.set(dict, forKey: "WeekStates") 
+0

什么ü面临崩溃 –

+0

的libC++ abi.dylib:与类型NSException @ Anbu.Karthik – Gurunathan

+0

的未捕获的异常终止其NSException可以显示完整的崩溃报告 –

https://developer.apple.com/documentation/foundation/userdefaults

的UserDefaults类提供用于访问 常见类型如浮标方便的方法,双打,整数,布尔值,和URL。 A 默认对象必须是一个属性列表 - 也就是,一个实例(或对于集合的一个实例,组合):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!) 
    } 

当你在最后一点提到我试图[String]它的工作原理。

我不确定您是否可以存储类型为[Int : [String]]的数据,因为我的知识UserDefaults属性列表只能接受某些类型的变量,所以它具有此限制。您可以存储的变量这些类型:

  1. Array
  2. Data
  3. Date
  4. Dictionary
  5. NSNumber
  6. String
+0

我保存它只有一本字典。 – Gurunathan

+0

您不能以NSNumber或Int为关键字来存储字典 –