2011-05-29 38 views
56

我有一個BOOL類型的屬性,我想執行搜索所有的管理對象,其中此屬性是YES如何在Core Data中編寫BOOL謂詞?

對於字符串屬性,它很簡單。我創建這樣一個斷言:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName]; 

但我怎麼做到這一點,如果我有一個名爲選擇一個布爾值屬性,我想爲這個斷言?我能做這樣的事嗎?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber]; 

還是我需要其他格式說明符,只是通過YES

回答

91

Predicate Programming Guide

您指定和如下面的例子說明了布爾值相等測試:

NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"anAttribute == %@", [NSNumber numberWithBool:aBool]]; 
NSPredicate *testForTrue = [NSPredicate predicateWithFormat:@"anAttribute == YES"]; 

您還可以檢查出Predicate Format String Syntax

+0

@inorganik我讀過類似,根據權利要求[這裏](http://stackoverflow.com/a/22043435/375300)。我不知道這是什麼原因,但它應該*工作,它適合我。 – albertamg 2015-05-05 14:40:50

+0

@inorganik我也試過了,它工作(「它爲我做」)。我不知道你試過了什麼。我很好奇。如果你願意,可以分享一個測試用例的鏈接,這樣我就可以嘗試完全相同的代碼。 – albertamg 2015-05-05 21:22:41

+0

我重新測試,它的工作......所以我錯了。其他一些事情一定會導致我的情況失敗。無論哪種方式+1在你的答案 – inorganik 2015-05-05 21:27:20

37

夫特4.0

let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true)) 
+0

是否有任何方式來獲取所有對象布爾等於零?或者它總是必須是真或假? – 2016-07-17 18:07:05

2

夫特3.0作出了本略有變化:

let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(booleanLiteral: true)) 
12

夫特3

let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true)) 

在Swift 3中,您應該使用NSNumber(value: true)

使用​​和一般的任何文字初始化劑直接被氣餒並且例如SwiftLint(ⅴ0.16.1。)將生成用於使用ExpressibleBy...Literal初始化劑直接警告:

編譯器初始化協議違反:該初始化中聲明編譯器協議(如ExpressibleByArrayLiteral)不應直接調用。 (compiler_protocol_init)

+2

或者:'NSPredicate(格式:「boolAttribute ==%@」,與NSNumber一樣)' – 2017-05-15 07:47:22

2

夫特4

request.predicate = NSPredicate(format: "field = %@", value as CVarArg) 
相關問題