(Zunächst) Erhalt doppelter Ergebnisse von FetchedObjectsIOS

Programmierung für iOS
Anonymous
 (Zunächst) Erhalt doppelter Ergebnisse von FetchedObjects

Post by Anonymous »

Ich nehme an einem Kurs teil, um die iOS-Programmierung zu erlernen, und arbeite an einem Kursprojekt zum Thema Kerndaten, Filterung und Sortierung. Die Klasse leistet schlechte Unterrichtsarbeit, aber ich bin nah dran. Ich möchte nicht, dass irgendjemand mein Projekt für mich erledigt, aber ich glaube, ich bin beim Debuggen dessen, was ich gerade sehe, ratlos.
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")
(Ich habe diesen Text in die Anzahl der Gerichte eingefügt, um das Geschehen einzugrenzen, und beim ersten Aufruf der Ansicht heißt es tatsächlich, dass es 24 Gerichte gibt)
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)
}
}
Ich bin äußerst offen für die Möglichkeit, dass ich etwas falsch mache, heh. Aber hier ist der Teil, der mich wirklich aus der Fassung bringt: Wenn ich etwas in die Suchleiste eingebe, wird nicht nur richtig gefiltert, es werden auch keine Duplikate gefunden. Das ist ein bisschen seltsam. Jetzt lösche ich die Suchleiste und höre auf zu suchen, also sollte ich wieder das wahre Prädikat verwenden, und jetzt wird angezeigt, dass es 12 Gerichte gibt und keine Duplikate angezeigt werden. Das alles lässt mich denken, dass es wirklich nur 12 Dishes in der Entität gibt, und konzentriert meinen Fokus darauf, herauszufinden, warum FetchObjects 24 zurückgibt, wenn die Ansicht zum ersten Mal verwendet wird.
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post