2017-07-18 3 views
1

In meinem iOSXcode8 Projekt resultierende Swift mit, ich meine ein fetch der Durchführung Core-Data:Fetch Core-Daten werden in doppelte Elemente

func searchFoods() { 

    let context: NSManagedObjectContext = appDel.managedObjectContext 
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Foods") 

    print("Searching Database for \(searchVariable)...") 

    var subPredicates : [NSPredicate] = [] 

    let codeSearch = NSPredicate(format: "codeText contains[c] %@", "\(searchVariable)") 
    subPredicates.append(codeSearch)   

    request.predicate = NSCompoundPredicate(orPredicateWithSubpredicates: subPredicates) 
    request.returnsObjectsAsFaults = false 

    do { 
     let results = try context.fetch(request) 
     if results.count > 0 { 
      for result in results as! [NSManagedObject] { 
       if let item = result.value(forKey: "title") as? String { 
        // Maybe put a loop of some kind to only append the found item count?? 
        searchArray.append(item) 
        myTableView.reloadData() 
       } 
      } 
     } 
    } catch { 
     print("Fetch failed...") 
    } 

} 

jedoch meine searchArray, dass ein [String] der Suchergebnisse ist erstellt viele Duplikate, die ich kenne, sind nicht da; es listet sie 2 oder 3 mal auf. Ich kann nicht herausfinden, wie man das Anhängen auf den Ergebniszählungsbetrag beschränkt. Wenn ich Obst suche, kann es eine array wie bananas, strawberries, peaches, oranges, bananas, strawberries, peaches, oranges usw. zurückgeben und wiederholen. Kann mir bitte jemand helfen?

+0

Die offensichtliche Frage an diesem Punkt ist, woher wissen Sie, dass sie nicht wirklich da sind? –

+0

Da ich diese App teste, entferne ich alle vorherigen Daten und lade jedes Mal, wenn ich die App starte, neue Daten in CoreData. Wieder teste ich an dieser Stelle. Going live wird es nicht so sein. – ChallengerGuy

Antwort

0

Es gibt nichts im Code, das zu Duplikaten in den Abrufergebnissen führen würde. Wenn sie in dem persistenten Speicher tatsächlich nicht vorhanden sind, dann ist die wahrscheinlichste Ursache, dass Sie dies tun:

   searchArray.append(item) 

Aber es gibt keine Anzeichen für immer die letzten Ergebnisse Ausräumen. Ihre Beispielergebnisse stimmen damit überein. Wenn vier Ergebnisse vorhanden sind, fügen Sie sie einmal zum Array hinzu und fügen sie später erneut hinzu.

Es ist auch möglich, dass ein Problem mit den Methoden der Tabellenansichtsdatenquelle auftritt, aber Sie leiten das wahrscheinlich direkt vom Inhalt von searchArray.

+0

Ich sah in einem anderen Bereich meines Codes und Sie hatten Recht, dass ich vorherige Ergebnisse nicht gelöscht habe. Vielen Dank. – ChallengerGuy

Verwandte Themen