Am unfamiliar with UserDefaults and wanted to give it a shot, so I set up storing all of my data in a user defaults class (as shown)
import Foundation
import Combine
class UserSettings: ObservableObject {
@Published var mon: [UserClass] {
didSet {
UserDefaults.standard.set(mon, forKey: "mon")
}
}
@Published var tue: [UserClass] {
didSet {
UserDefaults.standard.set(tue, forKey: "tue")
}
}
@Published var wed: [UserClass] {
didSet {
UserDefaults.standard.set(wed, forKey: "wed")
}
}
@Published var thu: [UserClass] {
didSet {
UserDefaults.standard.set(thu, forKey: "thu")
}
}
@Published var fri: [UserClass] {
didSet {
UserDefaults.standard.set(fri, forKey: "fri")
}
}
@Published var homeworks: [String] {
didSet {
UserDefaults.standard.set(homeworks, forKey: "homeworks")
}
}
@Published var lastSet: String {
didSet {
UserDefaults.standard.set(lastSet, forKey: "lastSet")
}
}
init() {
self.mon = UserDefaults.standard.object(forKey: "mon") as? [UserClass] ?? []
self.tue = UserDefaults.standard.object(forKey: "tue") as? [UserClass] ?? []
self.wed = UserDefaults.standard.object(forKey: "wed") as? [UserClass] ?? []
self.thu = UserDefaults.standard.object(forKey: "thu") as? [UserClass] ?? []
self.fri = UserDefaults.standard.object(forKey: "fri") as? [UserClass] ?? []
self.homeworks = UserDefaults.standard.object(forKey: "homeworks") as? [String] ?? []
self.lastSet = UserDefaults.standard.object(forKey: "lastSet") as? String ?? ""
print("homeworks \(homeworks)")
}
}
struct UserClass: Hashable, Codable {
let start: String
let end: String
let name: String
}
func encodeClass(classes: [UserClass], key: String) {
do {
// Create JSON Encoder
let encoder = JSONEncoder()
// Encode Note
let data = try encoder.encode(classes)
print(data)
// Write/Set Data
UserDefaults.standard.set(data, forKey: key)
} catch {
print("Unable to Encode Array of Notes (\(error))")
}
}
func decodeClass(key: String) -> [UserClass] {
var classes: [UserClass] = []
if let data = UserDefaults.standard.data(forKey: key) {
do {
// Create JSON Decoder
let decoder = JSONDecoder()
// Decode Note
classes = try decoder.decode([UserClass].self, from: data)
} catch {
print("Unable to Decode Notes (\(error))")
}
}
return classes
}
But when I went to read my data on the iOS app and the WatchOS app, it's like they each have an independent copy of the data that doesn't affect one another. As in, I'll have an array of homework string's persistently saved on the watch, but the phone version will still say the array is empty. How do I get them to sync up as one?
Btw on my ContentViews I read the stored data through just using an ObservedObject like so
@ObservedObject var userSettings = UserSettings()