2016-08-08 23 views
1

Ich bin in Swift mit dem folgenden Problem konfrontiert.Swift: Suche nach einem String im Kerndatenmodell

Ich schrieb die folgende Funktion, um alle Personen in meinem Modell mit dem name "David" abzurufen.

private func myFetchRequest() 
{ 
    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

    let myRequest = NSFetchRequest(entityName: "RegisterOfPersons") 

    myRequest.predicate = NSPredicate(format: "name = %@", "David") 

    do{ 
     let results = try moc.executeFetchRequest(myRequest) 

     for result in results 
     { 
      print(result) 
     } 

    } catch let error{ 
     print(error) 
    } 
} 

Auch wenn mein Modell enthält zwei Einträge mit dem attribute name = „David“, der Linie

myRequest.predicate = NSPredicate(format: "name = %@", "David") 

diese Einträge nicht findet, weil „name“ ein optionales Attribut in meinem Modell ist. Muss ich nach Optional ("David") suchen, was etwa myRequest.predicate = NSPredicate(format: "name = %@", Optional("David")) bedeutet?

Wie kann ich in meinem Modell nach allen Einträgen mit dem Namen "David" suchen? Was mache ich falsch?

Danke für Ihre Hilfe!

+0

Nicht sicher versuchen

myRequest.predicate = NSPredicate(format: "name = '%@'", "David") 

auch einschließen, aber mit 'name' ein optionales Attribut sein ist nicht verbunden. Swift-Optionen sind nicht dasselbe wie die optionalen Attribute von Core Data. –

+0

Funktioniert die literale Syntax 'NSPredicate (Format:" name = 'David' ")? – vadian

Antwort

4

Du prädizieren mit string so Ihren Vergleich Namen mit Apostroph wie diese mit Contains

myRequest.predicate = NSPredicate(format: "name CONTAINS[cd] %@", "David") 
+0

Dies wird mit der Literalzeichenfolge% @ ​​verglichen. Aus dem Prädikat-Programmierleitfaden "Wenn Sie die Variablenersetzung mit% @ verwenden (wie zum Beispiel Vorname wie% @), werden die Anführungszeichen automatisch für Sie hinzugefügt." – pbasdf

+0

@pbasdf Ich weiß, dass aber op ''' 'verwendet, das ist der Grund für das Hinzufügen von Single Quote. –

+0

Vielen Dank für Ihre Antwort! Ich habe versucht, wie Sie vorgeschlagen haben. Es funktioniert jedoch immer noch nicht. Vielleicht mache ich irgendwo einen Fehler? – Pisan