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】:

您在加载 ObjectData 时感到困惑。 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 中

使用 swift 将数组保存和检索到用户默认值

Swift - 将 [String: Any] 数组保存到 NSUserDefauls

将数组保存到 CoreData Swift

核心数据和数组 swift 2.0