I'm trying to save an array set to user defaults as part of a class, but I get an error whenever I add to the array in a view. Everything else works when I change the variable (i.e., saved to userdefaults and available in the changed state when I restart the app). The issue seems to be in writing the data to the UserDefaults rather than initializing it or reading it. Thanks!
Thread 1: "Attempt to insert non-property list object {(\n 20\n)} for key savedFavs"
Here's the code
import Foundation
import Combine
import SwiftUI
class Preferences: ObservableObject {
@Published var chosenVersion: Int {
didSet {
UserDefaults.standard.set(self.chosenVersion, forKey: "savedVersion")
}
}
@Published var isPsalmsExpanded: Bool {
didSet {
UserDefaults.standard.set(self.isPsalmsExpanded, forKey: "savedExpanded")
}
}
@Published var showMT: Bool {
didSet {
UserDefaults.standard.set(self.showMT, forKey: "savedMT")
}
}
@Published var fontSize: Int {
didSet {
UserDefaults.standard.set(self.fontSize, forKey: "savedSize")
}
}
@Published var scrollPosition: Int = 0
@Published var preferredColor: ColorScheme {
didSet {
UserDefaults.standard.set(self.preferredColor, forKey: "savedColor")
}
}
@Published var favPsalms: Set<Int> {
didSet {
UserDefaults.standard.set (self.favPsalms, forKey: "savedFavs")
}
}
init() {
self.chosenVersion = UserDefaults.standard.object(forKey: "savedVersion") as? Int ?? 0
self.isPsalmsExpanded = UserDefaults.standard.object(forKey: "savedExpanded") as? Bool ?? false
self.showMT = UserDefaults.standard.object(forKey: "savedMT") as? Bool ?? false
self.fontSize = UserDefaults.standard.object(forKey: "savedSize") as? Int ?? 20
self.preferredColor = UserDefaults.standard.object(forKey: "savedColor") as? ColorScheme ?? .light
self.favPsalms = UserDefaults.standard.object(forKey: "savedFavs") as? Set<Int> ?? Set<Int>()
}
}