【发布时间】:2016-11-12 15:54:37
【问题描述】:
我有一个字典,我想将它保存到 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")
但我无法检索我保存的内容
不幸的是,这个question 在一些 cmets 之后并没有帮助我,我相信这里的目标是将我的字典转换为数据(或其他东西),在我检索到它之后,我将它转换回字典
【问题讨论】:
-
来自文档:
The NSUserDefaults class provides convenience methods for accessing common types such as floats, doubles, integers, Booleans, and URLs. A default object must be a property list, that is, an instance of (or for collections a combination of instances of): NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary. If you want to store any other type of object, you should typically archive it to create an instance of NSData. For more details, see Preferences and Settings Programming Guide.事件不是其中之一,这就是我们在 Objective-C 中使用编码/解码的原因。 -
谢谢@Larme,如果您有什么想看的,我会尝试查找有关此转换的一些信息,请回答我。
-
对于像这样的小对象,您可以使用
initWithDictionary:方法和toDictionary。将Event对象转换为["Name":mySensorName,"Type":mySensorType, "Sub":mySensorSub"]或类似的东西。 -
好的,我会用这些做我的研究,再次感谢!
标签: ios dictionary nsuserdefaults