繁体   English   中英

将字典保存到 NSUserDefaults Swift

[英]Save Dictionary into NSUserDefaults Swift

我有一个字典,我想将它保存到 NSUserDefaults(或其他东西,以便在我终止应用程序后可以访问我的变量),我找到了一个例子:

var saved = NSUserDefaults.standardUserDefaults()
let dict = ["Name": "Paul", "Country": "UK"]
saved.setObject(dict, forKey: "SavedDict")

但是当我用它来挖掘字典时,它不起作用。 (也许是因为我的字典有点不同)

我的字典是这样制作的:

 var userDictionary = [Int : Event]()

 struct Event {
        var sensorName: String
        var sensorType: String
        var sensorSub: String

    }

我添加这样的元素:

userDictionary[value] = Event(sensorName: "first", sensorType: "Temp", sensorSub: "Third")

这是我试图做的,所以我可以存储它。

saved.setObject(userDictionary, forKey: "valueDictionary")

我得到这个错误:

无法将“[Int : SensorsView.Event]”类型的值转换为预期的参数类型“AnyObject?”

为了避免这个错误,我这样做了:

self.saved.setObject(self.userDictionary as? AnyObject, forKey: "valueDictionary")

但我无法检索我保存的内容

不幸的是,经过一些评论后,这个问题对我没有帮助

尝试将数据转换为 NSData,然后像这样检索:

/// Save
NSUserDefaults.standardUserDefaults().setObject(NSKeyedArchiver.archivedDataWithRootObject(object), forKey: key)

/// Read
var data = NSUserDefaults.standardUserDefaults().objectForKey(key) as NSData
var object = NSKeyedUnarchiver.unarchiveObjectWithData(data) as [String: String]

我认为来自下面的链接,您将能够将字典存储到 NSUserDefaults 中

Swift NSUserDefaults 不保存字典? 或者

将字典保存到 NSUserDefaults 中可能会有所帮助

我设法使用 Realm 保存了我的自定义字典! 我使用了一个不同的类,而不是一个结构:

import RealmSwift


class Sensors : Object {


    dynamic var sensorName = ""
    dynamic var sensorType = ""
    dynamic var sensorSub = ""

}

然后我像这样填写:

    var useOfRealm = try! Realm() 
    var allSensors = useOfRealm.objects(Sensors.self)
    var saving = Sensors()
    func fillThis() {
    try! useOfRealm.write {

                saving.sensorName = "something"
                saving.sensorType = "something"
                saving.sensorSub = "something"

                useOfRealm.add(saving)
    }
}

使用带参数的函数,以便您可以动态填充“字典”。

使用allSensors以便您可以检索所需的一切。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM