I’m completely stumped on this. I can’t find anything that clearly explains to me what this code crashes when trying to run in on macOS but runs perfectly when on iOS. I’m very new to SwiftData, and had trouble just getting #Preview to function properly but managed to piece together enough online clues to work it out—but any tweaks I’ve tried to prevent the mac crash have proved useless thus far.
I’ve simplified things and eliminated as much code as possible to keep the following text short but still show the issue at hand. The gist is that I’m constructing an app that allows the user 5 “Preference Sets” in which to save different preferences/settings and allow them to use these settings across multiple windows at the same time (e.g., they could have four windows open on a Mac and one could show an IconTab using settings from selectedPreferenceSet #1 in the first window, an IconTab using completely different settings from selectedPreferenceSet #2 in the second window, and so on.
Here’s my model:
@Model class UserSettings {
var setNumber: Int
var showLetter: Bool
var showNumber: Bool
init(setNumber: Int, showLetter: Bool = false, showNumber: Bool = false) {
self.setNumber = setNumber
self.showLetter = showLetter
self.showNumber = showNumber
}
}
the main page:
struct HomeView: View {
@Environment(\\.modelContext) var context
@Query var settings: \[UserSettings\]
func createPreferenceSets(count: Int) {
for i in 0..\
and one of the problematic subviews:
struct IconTab: View {
@Environment(\\.modelContext) var context
@Query(sort: \\UserSettings.setNumber) var settings: \[UserSettings\]
@SceneStorage("set") var selectedPreferenceSet: Int = 0
\\\\ \_This is where the index-out-of-range error is occuring\_
var currentSettings: UserSettings {
\\\\ \_If I place a print("\\(settings.count)") line here, I get 0, so the createPreferenceSets function in HomeView() has apparently not run yet...
settings\[selectedPreferenceSet\]
}
var body: some View {
VStack(spacing: 75) {
HStack {
if currentSettings.showLetter {
Image(systemName: "a.circle")
}
if currentSettings.showNumber {
Image(systemName: "1.circle")
}}}}}
