Hello, I'm new to iOS development and I need help for working with CloudKit.
I have an application that allows me to add, delete and display information stored in a CloudKit container.
When I try to add a new record, this one can be visible into my CloudKit Console but if don't switch to a other view and back to my view (with my list of records) the record isn't displayed.
How can I update my list to reflect directly the new record add to my container ?
This is my code with split into different files (in attachment)
Sets : define my record struct SetsView: list of my records AddSetView: add new records AddSetView-ViewModel : view model with my add function SetsView-ViewModel: view model with my fetch function
Add function :
func add() async throws {
var newSet = set
newSet.name = name
newSet.code = code
newSet.releaseDate = releaseDate
newSet.numberOfCards = numberOfCards
let record = try await db.save(newSet.set)
guard let set = Set(record: record) else { return }
setsDictionary[set.id!] = set
print("Set added")
}
Fetch function :
func fetchSets() async throws {
let query = CKQuery(recordType: SetRecordKeys.type.rawValue, predicate: NSPredicate(value: true))
query.sortDescriptors = [NSSortDescriptor(key: "name", ascending: false)]
let result = try await db.records(matching: query) // récupère les données qui correspondent aux critères
let records = result.matchResults.compactMap { try? $0.1.get() } // Récupère les records
sets.removeAll()
records.forEach { record in
sets.append(Set(record: record)!)
}
print("Sets fetched")
print(sets)
}
I try to add some print to figure out what's going on, but I don't understand.
This is the console log for this scenario : open app without any data into the container > add a new record
First, the fetch function is executed but there is no data into the container (it's logic)
Second I add a new record (Set) :
Into the CloudKit console the new Set is visible
So for refresh my view with this record I need to re-call the fetch function. I tried many things but nothing works.
Even if the fetch function is called, the new record is not retrieved. Do you have any idea how to solve this problem?
Thanks for your help.