2016-05-15 26 views
0

Ich möchte Kombination, so etwas tun:„Und“ und „Oder“ auf NSPredicates

NSPredicate(format: "name contains[cd] %@ AND (position == %@ OR position == %@), name, position1, position2) 

Allerdings habe ich versucht, und ich halte ernsthafte Core Data Anwendungsfehler bekommen. Ich habe dann versucht mit NSCompoundPredicate, aber ich kann auch nicht "UND" und "ODER" s dort kombinieren.

Ich habe gelesen Combining 'AND' and 'OR' Condition in NSPredicate und es ist anders, dass der Fragesteller ein "OR" auf einer Untersammlung wollte, so dass die Antwort eine Unterabfrage beinhaltet, die ich nicht will.

Wie mache ich das?

+1

Welche Fehler werden Sie bekommen? Haben Sie versucht "" (Name enthält [cd]% @) UND (Position in% @) ", Name, [Position1, Position2])'? – Paulw11

+0

danke, das war ein besserer Weg als ich es tat! – anders32

+0

Es stellte sich heraus, dass ich fälschlicherweise dachte, dass das obige nicht funktionierte. Bevor ich versuchte, Strings mit der traditionellen Swift-Interpolation über eine for-Schleife zu einem NSPredate hinzuzufügen - was vermutlich die Core Data-Fehler verursacht hat. Dann habe ich vergessen, dass das das Problem war, nachdem ich Dinge mit NSCompoundPredicate versucht hatte. – anders32

Antwort

1

Ich habe nicht genug Ruf, um einen Kommentar zu schreiben. Was du gepostet hast, sollte funktionieren. Es könnte helfen, mehr Code zu veröffentlichen, um das genaue Problem zu identifizieren.

In hofft, dass es hilft Ihnen, Ihr Problem zu fangen, ich werde eine Arbeitsprobe Post mit kombinierten AND und OR:

let alice = Person(firstName: "Alice", lastName: "Smith", age: 24, position: "Up") 
let bob = Person(firstName: "Bob", lastName: "Jones", age: 27, position: "Left") 
let charlie = Person(firstName: "Charlie", lastName: "Smith", age: 33, position: "Right") 
let quentin = Person(firstName: "Quentin", lastName: "Alberts", age: 31, position: "Down") 
let people = [alice, bob, charlie, quentin] 

let predicate = NSPredicate(format: "firstName contains[cd] %@ AND (position == %@ OR position == %@)", "e", "Up", "Down") 
let filtered = (people as NSArray).filteredArrayUsingPredicate(predicate) 

print(filtered) 

// prints [Alice Smith, Quentin Alberts]