尝试在userDefaults中存储Int,arrayof [string]对时出错

时间:2017-06-16 04:56:31

标签: ios swift3 nsuserdefaults

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")

2 个答案:

答案 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属性列表只能接受某些类型的变量,因此它具有此限制。您可以存储以下类型的变量:

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