由於覺得網上對於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 > 12ANY 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.h5.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.h3.predicateFormat 返回接收者的格式字串。- (NSString *)predicateFormat傳回值 接收者的格式字串特殊考慮 用這個方法返回的字串不能夠保證和使用predicateWithFormat:等方法返回的字串一樣。你不能用這個方法來建立一個謂詞的持久化表示,但是你可以用它來再現原始謂詞。如果你需要一個謂詞的持久化表示,你可以建立一個archive(NSPredicate採用NSCoding協議)有效性 IOS 3.0及以後有效。聲明於 NSPredicate.h 4.predicateWithSubstitutionVariables: 通過用給定的替換字典中的值替換接收者的變數,返回接收者的副本。- (NSPredicate *)predicateWithSubstitutionVariables:(NSDictionary *)variables參數 variables:替換變數字典。字典必須包含接收者素有變數的索引值對。傳回值 接收者的值被特殊變數替換所返回的接收者副本。討論 接收者本身不會被方法所改變,所以你可以重複使用任意數量的替換。有效性 IOS 3.0及以後有效。聲明於 NSPredicate.h