2017-08-01 87 views
1

我试图将swift字典[NSNumber : NSNumber]保存到UserDefaults。我已经试图将其转换为NSDictinonary,但是仍然会在我使用set()函数时崩溃。NSNumber swift字典到userdefaults swift3

重点是信标小调(NSNumber的) 值是一个NSTimeinterval铸造为NSNumber

碰撞:

的libC++ abi.dylib:与 类型的未捕获的异常终止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") 
} 

打印出:键类型是LazyMapCollection <字典<的NSNumber,的NSNumber>,的NSNumber>(_基:[46171:1501585588.173543],_transform:(功能))

+0

分享您尝试过的一些代码。 –

+0

什么是异常原因? – vadian

+0

@vadian在O.P.的原始问题中,异常原因就在源代码之上。 –

回答

1

可以尝试下面的答案。

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) 
     } 
    } 
0

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

至于方法,您可以与您的NSNumber年代到String'将S

+1

[我相信你* **可以***使用NSNumbers作为关键字](https://stackoverflow.com/questions/7337811/nsnumber-as-key-for-nsdictionary),塔拉斯。你可能会想到原始的C类型,比如'ints'。 –

+0

@MichaelDautermann是的,你可以使用'NSNumber'作为'Dictionary'的关键字,但不能使用'[NSNumber:NSNumber]'作为'NSUserDefaults'的对象 –