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)
}
}
我正在尝试将 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)
}
}