I'm trying to store an array of custom structs.
In my attempt below I get a run-time error in the second line of saveSampleArrayOfQuerySettings() complaining about casting to 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")
I wonder whether I need to encode my struct. I checked out these posts but oddly couldn't even get the samples in the posts working (let alone applying them to my code.)
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
Can you please let me know how to get this working?