I think this is a bug, but figured I'd double check in case I missed something stupid.
I have the following model:
class Thread {
var id: UUID
var timestamp: Date
var style: String
var fit: String
var brand: String
var size: String
@Attribute(.externalStorage) var image: Data?
@Relationship(deleteRule: .cascade) var worn: [TimesWorn]
var wornCount: Int
@Relationship(deleteRule: .cascade) var washed: [TimesWashed]
var washedCount: Int
@Relationship(deleteRule: .cascade) var fitPics: [FitPic]
which I am accessing via the following method in my app intent file:
func perform() async throws -> some IntentResult {
guard let modelContainer = try? ModelContainer(for:Thread.self) else {
return .result()
}
let descriptor = FetchDescriptor<Thread>(predicate: #Predicate {thread in
thread.style == threadStyle
})
let threads = try? await modelContainer.mainContext.fetch(descriptor)
if let thread = threads?.first {
let newWorn = TimesWorn()
thread.worn.append(newWorn)
thread.wornCount = thread.worn.count
}
return .result()
}
TimesWorn is super simple, just a timestamp.
Basically running into two issues:
when I hit the button in the widget tied to the intent, wornCount will not update in the widget UI so there is no feedback that anything has happened. if I instead use worn.count in my widget text view, it does update immediately.
To add to the weirdness any places in the main application where I am using wornCount do not update until I force quit the app and relaunch.
Please forgive me if I am doing something dumb here, or am asking this question stupidly. this is my first swift app and my first ever forum post!
running Xcode 15 beta 6 + Simulator iOS 17 beta 5