轉自:
NSPredicate用於查詢和過濾 在SQL中做爲查詢條件一般用WHERE,但在COREDATA中做爲查詢條件就能夠用到NSPredicate. NSPredicate 不單能夠和COREDATA中的FetchRequest 配合使用。也能夠與NSArray配合使用。 NSPredicate 中支持的關鍵詞和條件符: 一、>,<,>=,<=,= 比較運算符。 如: NSPredicate * qcondition= [NSPredicate predicateWithFormat:@"salary >= 10000"]; 二、字符串操做(包含):BEGINSWITH、ENDSWITH、CONTAINS 如: @"employee.name BEGINSWITH[cd] '李'" //姓李的員工 @"employee.name ENDSWITH[c] '夢'" //以夢結束的員工 @"employee.name CONTAINS[d] '宗'" //包含有"宗"字的員工 注:[c]不區分大小寫[d]不區分發音符號即沒有重音符號[cd]既不區分大小寫,也不區分發音符號。 三、範圍:IN ,BWTEEN 如: @"salary BWTEEN {5000,10000}" @"em_dept IN '開發'" 四、自身:SELF,這個只針對字符數組起做用。 如: NSArray * test = =[NSArray arrayWithObjects: @"guangzhou", @"beijing", @"shanghai", nil]; @"SELF='beijing'" 五、通配符:LIKE LIKE 使用?表示一個字符,*表示多個字符,也能夠與c、d 連用。 如: @"car.name LIKE '?he?'" //四個字符中,中間爲he @"car.name LIKE '*jp'" //以jp結束 六、正則表達式:MATCHES 如: NSString *regex = @"^E.+e$";//以E 開頭,以e 結尾的字符。 NSPredicate *pre= [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex]; if([pre evaluateWithObject: @"Employee"]){ NSLog(@"matches YES"); }else{ NSLog(@"matches NO"); } 七、邏輯運算符:AND、OR、NOT 如: @"employee.name = 'john' AND employee.age = 28" 八、佔位符: NSPredicate *preTemplate = [NSPredicate predicateWithFormat:@"name==$NAME"]; NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys: @"Name1", @"NAME",nil]; NSPredicate *pre=[preTemplate predicateWithSubstitutionVariables: dic]; 佔位符就是字典對象裏的key,所以你能夠有多個佔位符,只要key 不同就能夠了。 對數組過濾: 如: NSMutableArray *carsCopy = [carsmutableCopy]; [carsCopyfilterUsingPredicate: predicate];//filterUsingPredicate和NSMutableArray構成新數組。 NSLog (@"%@", carsCopy); predicate = [NSPredicatepredicateWithFormat:@"engine.horsepower > %d", 50]; results = [cars filteredArrayUsingPredicate: predicate]; NSLog (@"%@", results);