Es handelt sich um eine Menüanwendung. Es gibt eine Funktion, die Menüelemente aus einem Rest-Aufruf abruft und sie einer Core Data-Entität hinzufügt. Ich bin mir ziemlich sicher, dass das aufgerufen wird und 12 Elemente in die Dish-Entität einfügt.
Ich habe eine Ansicht, die versucht, Ihnen die Anzeige aller Dishes zu ermöglichen. Sie enthält eine Suchleiste, um die Suche einzugrenzen. Als ich diese Ansicht zum ersten Mal geladen sehe, werden 24 Gerichte angezeigt. Jedes Gericht wird zweimal angezeigt. Der Code dafür lautet:
Code: Select all
NavigationView {
FetchedObjects (
predicate:buildPredicate(),
sortDescriptors: buildSortDescriptors()
) {
(dishes: [Dish]) in
List {
Text(String(dishes.count) + " dishes")
ForEach(dishes, id: \.self) {
dish in
DisplayDish(dish).onTapGesture {apGesture in
self.showAlert.toggle()
}
}
}
}
}.searchable(text: $searchText, prompt: "Search items")
Das Prädikat ist wie folgt aufgebaut:
Code: Select all
private func buildPredicate() -> NSPredicate {
if searchText.isEmpty {
NSPredicate(value: true)
} else {
NSPredicate(format: "name CONTAINS[cd] %@", searchText)
}
}
Mir ist klar, dass es eine Menge Code gibt, den ich nicht eingefügt habe; Wenn ich etwas ausgelassen habe, das mir wichtig/notwendig erscheint, kann ich es ergänzen. Das Einzige, was mir sonst noch aufgefallen ist und das relevant zu sein scheint, ist, dass die Funktion, die die Gerichte lädt, tatsächlich zweimal aufgerufen wird. Aber der erste Aufruf erhält einen NSError von cancelled, vermutlich weil der zweite landet und ihn ersetzt, und wenn der Staub sich entfernt hat, speichert die Ladefunktion tatsächlich nur einmal, und eine Abfrage direkt danach zeigt 12 Gerichte, nicht 24.
Jede Hilfe wäre sehr dankbar.
Mobile version