由於覺得網上對於NSPredicate講解比較粗略,所以打算先看文檔,奈何英語水平有限,故先翻譯一遍,加深理解(如有錯誤,歡迎指正)。
概覽
NSPredicate類是用來定義邏輯條件約束的獲取或內存中的過濾搜索。
您可以使用謂詞來表示邏輯條件,用於描述對象持久性存儲在內存中的對象過濾。雖然從 NSComparisonPredicate, NSCompoundPredicate, 和 NSExpression的實例直接創建謂詞是常見的,但是你會經常用NSPredicate的類方法解析的格式字符串來創建謂詞。謂詞格式字符串的例子包括:
簡單的比較, 比如 grade== "7" 或者 firstNamelike "Shaffiq"
不區分大小寫和音調的查找, 比如 namecontains[cd] "itroen"
邏輯運算, 比如 (firstName like "Mark") OR (lastName like "Adderley")
In OS X v10.5 and later, you can create €œbetween€ predicates such as datebetween {$YESTERDAY, $TOMORROW}.
您可以創建關系謂詞,比如:
group.name like "work*"
ALL children.age > 12
ANY children.age > 12
您可以創建謂詞操作,比如@sum.items.price < 1000 。完整語法參考,請參閱“謂詞編程指南” 。
您也可以創建包含變量的謂詞,那樣謂詞就可以在運行時(runtime)替換具體值之前預先定義。在os x v10.4,含變量的謂詞,估算是一個兩步驟的過程 (see predicateWithSubstitutionVariables: and evaluateWithObject:)。在os x v10.5及以後,你可以使用 evaluateWithObject:substitutionVariables:,它結合了這些步驟。
任務
創建謂詞:
[plain] view plaincopy
+ predicateWithFormat:
+ predicateWithFormat:argumentArray:
+ predicateWithFormat:arguments:
– predicateWithSubstitutionVariables:
+ predicateWithValue:
+ predicateWithBlock:
評估一個謂詞:
[plain] view plaincopy
– evaluateWithObject:
– evaluateWithObject:substitutionVariables:
獲取字符串表現形式:
[plain] view plaincopy
– predicateFormat
類方法
1.predicateWithBlock:
創建並返回一個謂詞,評估使用指定的塊對象和綁定的字典。
+ (NSPredicate *)predicateWithBlock:(BOOL (^)(id evaluatedObject, NSDictionary *bindings))block;
參數
block
block施加於被評估的對象。
block帶有兩個參數:
evaluatedObject:被評估的對象。
bindings:替換變量的字典。字典必須包含接收器中所有變量的鍵值對。
如果evaluatedObject的計算結果為true,該塊返回YES,否則為NO 。
返回值
一個評估對象使用了塊的謂詞。
特殊考慮
在os X v10.6.Core Data 在內存和原子存儲中支持這個方法,但是基於SQLite的存儲是不支持的。
有效性
4.0及以後有效
聲明於
NSPredicate.h
2.predicateWithFormat:
由給定的格式和解析結果創建一個新的字符串來創建並返回一個新的謂詞。
+ (NSPredicate *)predicateWithFormat:(NSString *)format, ...
參數
format:新謂詞的格式字符串。
...:以逗號分隔的參數列表。
返回值
一個新的謂詞,由創建一個新的格式字符串並且解析這個結果(即那個新的格式字符串)所得。
討論
格式字符串的格式和變量替換的限制,請參閱 Predicate Format String Syntax。
有效性
IOS 3.0及以後有效。
相關的代碼例子
ThreadedCoreData
ToolbarSearch
WeatherMap
聲明於
NSPredicate.h
3.predicateWithFormat:argumentArray:
創建並且返回一個新的謂詞,通過把數組裡面的值傳入到格式字符串中並且解析所得。
+ (NSPredicate *)predicateWithFormat:(NSString *)predicateFormat argumentArray:(NSArray*)arguments
參數
predicateFormat:新謂詞的格式字符串。
arguments:要代入格式字符串的數組。代入的時候數組裡的值按照數組裡的順序。
返回值
一個新的謂詞,通過把數組中的值按順序代入格式字符串並解析所得。
討論
格式字符串的格式和變量替換的限制,請參閱 Predicate Format String Syntax。
有效性
IOS 3.0及以後有效。
聲明於
NSPredicate.h
4.predicateWithFormat:arguments:
創建並且返回一個新的謂詞,通過把參數列表中的參數代入格式字符串中並且解析得到。
參數
predicateFormat:新謂詞的格式字符串。
argList:代入格式謂詞中的內容。參數列表代入順序即它們出現在列表中的順序。
返回值
一個新的謂詞,通過把參數列表中的值按順序代入格式字符串並解析所得。
討論
格式字符串的格式和變量替換的限制,請參閱 Predicate Format String Syntax。
有效性
IOS 3.0及以後有效。
聲明於
NSPredicate.h
5.predicateWithValue:
通過評估一個給定的值來創建並返回一個謂詞。
+ (NSPredicate *)predicateWithValue:(BOOL)value
參數
value:新謂詞需要評估的值。
返回值
評估一個值得到的謂詞。
有效性
IOS 3.0及以後有效。
聲明於
NSPredicate.h
實例方法
1.evaluateWithObject:
返回一個給定的BOOL值,用於指示一個給定的對象是否匹配接收者的特殊條件。
- (BOOL)evaluateWithObject:(id)object
參數
objec:接收者評估的對象。
返回值
如果對象匹配接收者特殊條件則返回YES,否則NO.
有效性
IOS 3.0及以後有效。
聲明於
NSPredicate.h
2.evaluateWithObject:substitutionVariables:
返回一個給定的BOOL值,用於指示一個給定的對象在一個給定的變量字典中的值代入後是否匹配接收者的特殊條件。
- (BOOL)evaluateWithObject:(id)object substitutionVariables:(NSDictionary *)variables
參數
objec:接收者評估的對象。
variables:替換變量的字典。字典必須包含接收者所有變量的鍵值對。
返回值
全部匹配返回YES,否則NO.
討論
此方法和那兩個步驟"首先引用接收者的predicateWithSubstitutionVariables:然後引用返回的謂詞的 evaluateWithObject:"返回的結果一樣。此方法在反復評估不同變量替換的謂詞情況下被優化。
有效性
IOS 3.0及以後有效。
聲明於
NSPredicate.h
3.predicateFormat
返回接收者的格式字符串。
- (NSString *)predicateFormat
返回值
接收者的格式字符串
特殊考慮
用這個方法返回的字符串不能夠保證和使用predicateWithFormat:等方法返回的字符串一樣。你不能用這個方法來創建一個謂詞的持久化表示,但是你可以用它來再現原始謂詞。如果你需要一個謂詞的持久化表示,你可以創建一個archive(NSPredicate采用NSCoding協議)
有效性
IOS 3.0及以後有效。
聲明於
NSPredicate.h
4.predicateWithSubstitutionVariables:
通過用給定的替換字典中的值替換接收者的變量,返回接收者的副本。
- (NSPredicate *)predicateWithSubstitutionVariables:(NSDictionary *)variables
參數
variables:替換變量字典。字典必須包含接收者素有變量的鍵值對。
返回值
接收者的值被特殊變量替換所返回的接收者副本。
討論
接收者本身不會被方法所改變,所以你可以重復使用任意數量的替換。
有效性
IOS 3.0及以後有效。
聲明於
NSPredicate.h