So füllen Sie die Datenbank nur einmal auf

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: So füllen Sie die Datenbank nur einmal auf

by Guest » 20 Jan 2025, 14:07

Ich möchte die Datenbank des Benutzers vorab füllen, wenn die App zum ersten Mal verwendet wird. Das ist, was ich habe:

Code: Select all

func checkAndPopulateData(modelContext: ModelContext) {
let fetchRequest = FetchDescriptor()
let existingRecords = try? modelContext.fetch(fetchRequest)

if existingRecords?.isEmpty ?? true {
populatePredefinedData(modelContext: modelContext)
}
}
in der App aufgerufen:

Code: Select all

init() {
checkAndPopulateData(modelContext: sharedModelContainer.mainContext)
}
Es funktioniert, außer wenn die App gelöscht und neu installiert wird. In diesem Fall gibt die Abrufanforderung nichts zurück, sodass die Elemente eingefügt werden können, und sie wird dann mit der App synchronisiert Cloud, was zu Duplikaten führt. Jedes Mal, wenn die App gelöscht und erneut installiert wird, werden neue Elemente angezeigt.
Wie kann man das verhindern? Ich habe versucht, den Elementen eindeutige Attribute hinzuzufügen, aber das wird nicht unterstützt. Ich würde es sowieso vorziehen, keine Uniques zu verwenden, um dieses Problem zu lösen, da ich keine Fehler auslösen möchte. Gibt es eine Möglichkeit zu warten, bis die CloudKit-Synchronisierung abgeschlossen ist, oder eine andere Lösung?

Top