2016-05-15 66 views
0

我想要做這樣的事情結合「與」和「或」:上NSPredicates

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

不過,我已經試過了,我不斷收到嚴重的核心數據應用程序錯誤。然後我嘗試使用NSCompoundPredicate,但是我不能將「AND」和「OR」組合在那裏。

我讀過Combining 'AND' and 'OR' Condition in NSPredicate,它的不同之處在於提問者希望子集合上有一個「OR」,所以答案涉及一個我不想要的子查詢。

我該怎麼做?

+1

你得到什麼錯誤?有你的嘗試'「(名稱包含[cd]%@)和(位置%@)」,名稱,[位置1,位置2])? – Paulw11

+0

謝謝,那是比我做的更好的方法! – anders32

+0

原來我錯誤地認爲上述不起作用。在我嘗試使用傳統Swift插值通過for循環添加字符串到NSPredicate之前 - 我懷疑會導致Core Data錯誤。然後,我忘了這是使用NSCompoundPredicate嘗試之後的問題。 – anders32

回答

1

我沒有足夠的知名度發表評論。你發佈的內容應該可以工作。它可能有助於發佈更多的代碼來識別確切的問題。

在希望它可以幫助你抓住你的問題,我會後與ANDOR結合工作示例:

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]