【发布时间】:2016-04-06 22:25:31
【问题描述】:
我正在尝试存储一组自定义结构。
在下面的尝试中,我在 saveSampleArrayOfQuerySettings() 的第二行中遇到运行时错误,抱怨强制转换为 AnyObject。
struct QuerySettings {
// let ARRAY_INDEX_WHERE_TO_SAVE_STRUCT = 0
let QUERY_SETTINGS_KEY = "querysettings"
let defaults = NSUserDefaults.standardUserDefaults()
private var _includeCompletedReminders: Bool = false // Default value
var includeCompletedReminders: Bool {
get {
// If value has been set before then use it otherwise retrieve it.
return _includeCompletedReminders
} set (newVal) {
_includeCompletedReminders = newVal
// saveSettings(self, index: ARRAY_INDEX_WHERE_TO_SAVE_STRUCT, saveKey: QUERY_SETTINGS_KEY)
}
}
private var _includeRemindersWithNoDueDate: Bool = true
var includeRemindersWithNoDueDate: Bool {
get {
return _includeRemindersWithNoDueDate
} set (newVal) {
_includeRemindersWithNoDueDate = newVal
// saveSettings(self, index: ARRAY_INDEX_WHERE_TO_SAVE_STRUCT, saveKey: QUERY_SETTINGS_KEY)
}
}
}
func saveSampleArrayOfQuerySettings(saveKey: String) {
let sampleArray = [QuerySettings(), QuerySettings()]
// Persist
let archivedSettingsArray = NSKeyedArchiver.archivedDataWithRootObject(sampleArray as! AnyObject)
// RUNTIME ERROR AT PREVIOUS LINE: "Could not cast value of type 'Swift.Array<RemindersPro.QuerySettings>' (0x112df10d8) to 'Swift.AnyObject' (0x1169d6018)."
NSUserDefaults.standardUserDefaults().setObject(archivedSettingsArray, forKey: saveKey)
NSUserDefaults.standardUserDefaults().synchronize()
// For Testing Purposes - Load the saved settings
if let retrievedArchivedSettingsArray : AnyObject = NSUserDefaults.standardUserDefaults().objectForKey(saveKey) {
if let settingsArray : AnyObject = NSKeyedUnarchiver.unarchiveObjectWithData(retrievedArchivedSettingsArray as! NSData) {
let arr = settingsArray as! [QuerySettings]
print(arr.first)
}
}
}
saveSampleArrayOfQuerySettings("saveKey")
我想知道是否需要对我的结构进行编码。我查看了这些帖子,但奇怪的是甚至无法让帖子中的示例正常工作(更不用说将它们应用到我的代码中了。)
How to save an array of objects to NSUserDefault with swift?
(Swift) Storing and retrieving Array to NSUserDefaults
How to save an array of custom structs to plist swift
你能告诉我如何让它工作吗?
【问题讨论】:
-
你需要使一个类 NSCoding 兼容并保存为 NSData
标签: arrays swift struct nsuserdefaults persist