Swift:无法将数组保存到 UserDefaults
Posted
技术标签:
【中文标题】Swift:无法将数组保存到 UserDefaults【英文标题】:Swift: can't save array to UserDefaults 【发布时间】:2017-01-08 15:24:43 【问题描述】:我有一个名为Stop
的课程。此类实现NSCoding
。我可以毫无问题地将Stop
的实例保存到UserDefaults。到现在为止还挺好。我的问题是保存一个Array
的止损点。这是我尝试的:
private func save(stopArray array: [Stop],withKey key: String)
let data = NSKeyedArchiver.archivedData(withRootObject: array)
self.userDefaults.set(data, forKey: key)
self.userDefaults.synchronize()
private func loadStopArray(key: String) -> [Stop]?
guard let data = self.userDefaults.object(forKey: key) as? Data else
return nil
return NSKeyedUnarchiver.unarchiveObject(with: data) as? [Stop]
现在,每次我调用loadStopArray
我都会得到一个空数组。不是 nil,只是一个空数组。
有什么想法吗?谢谢!
【问题讨论】:
为了判断发生了什么,我认为我们需要查看您对 Stop 的实现。 您确定在保存和检索时使用相同的密钥吗? @matt 你是对的,我的 NSCoder 构造函数返回 nil...谢谢! 【参考方案1】:您在加载 Object
和 Data
时感到困惑。 self.userDefaults.object()
到 self.userDefaults.data()
将产生数据。
private func loadStopArray(key: String) -> [Stop]?
if let data = self.userDefaults.data(forKey: key)
return NSKeyedUnarchiver.unarchiveObject(with: data) as? [Stop]
else
return nil
【讨论】:
以上是关于Swift:无法将数组保存到 UserDefaults的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 将字典数组保存到 NSUserDefaults
Swift:将一个对象数组和另一个对象数组保存到 NSUserDefaults 中