NSNumber swift 用户默认字典 swift3

NSNumber swift Dictionary to userdefaults swift3

我正在尝试将 swift 字典 [NSNumber : NSNumber] 保存到 UserDefaults。我已经尝试将其转换为 NSDictinonary,但是当我使用 set() 函数时应用程序仍然崩溃。

密钥是信标次要密钥 (NSNumber) 值是 NSTimeinterval 转换为 NSNumber

崩溃:

libc++abi.dylib: terminating with uncaught exception of type NSException

var  recentBeacons: [NSNumber : NSNumber] = [:]

func saveRecentBeaconDict()
{
    let recentBeaconKeys = recentBeacons.keys
    print("keys type is \(String(describing: recentBeaconKeys.self))")

    let recentBeaconsNSDict = recentBeacons as NSDictionary
    UserDefaults.standard.set(recentBeaconsNSDict, forKey:"recentBeacons")
}

prints out: keys type is LazyMapCollection< Dictionary < NSNumber, NSNumber >, NSNumber >(_base: [46171: 1501585588.173543], _transform: (Function))

您不能保存 [NSNumber : NSNumber] 类型的字典,只允许 [String, AnyObject] 或 [NSObject : AnyObject]。

作为一种方法,您可以将 NSNumber 转换为 String

试试下面的答案。

    var  recentBeacons: [NSNumber : NSNumber] = [:]
    func saveRecentBeaconDict()
    {
        let archivedObject = NSKeyedArchiver.archivedData(withRootObject: recentBeacons as NSDictionary)
        UserDefaults.standard.set(archivedObject, forKey: "recentBeacons")

        let data = UserDefaults.standard.object(forKey: "recentBeacons") as? Data
        if let _data = data {

            let allData = NSKeyedUnarchiver.unarchiveObject(with: _data) as! NSDictionary
            print(allData)
        }
    }