NSPredicate 详解

Cocoa框架中的NSPredicate用于查询,原理和用法类似于SQL中的where,作用相当于数据库的过滤器。

下面是几种常用的方法。

1.比较运算符>,<,==,>=,<=,!=
  可用于数值及字符串

NSArray *firstNames = @[ @"张", @"王", @"李", @"李" ];

NSArray *lastNames = @[ @"三", @"五", @"四", @"三" ];

NSArray *ages = @[ @34, @27, @20, @31 ];

NSMutableArray *people = [NSMutableArray array];

[firstNames enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

Person *person = [[Person alloc] init];

person.firstName = firstNames[idx];

person.lastName = lastNames[idx];

person.age = ages[idx];

[people addObject:person];

}];

NSPredicate *liPredicate = [NSPredicate predicateWithFormat:@"firstName = ‘李‘"];

NSPredicate *thirtiesPredicate = [NSPredicate predicateWithFormat:@"age >= 30"];

NSArray  *personArray =  [people filteredArrayUsingPredicate:liPredicate];

for (Person *people in personArray) {

NSLog(@"李  : %@ ,%@, %@", people.firstName,people.lastName,people.age);

}

NSArray  *ageArray =  [people filteredArrayUsingPredicate:thirtiesPredicate];

for (Person *people in ageArray) {

NSLog(@"age  : %@ ,%@, %@", people.firstName,people.lastName,people.age);

}

Log:

2015-09-22 15:51:57.611 CoreDataDemo[7464:207110]   : ,, 30

2015-09-22 15:51:57.611 CoreDataDemo[7464:207110]   : ,, 31

2015-09-22 15:51:57.612 CoreDataDemo[7464:207110] age  : ,, 34

2015-09-22 15:51:57.612 CoreDataDemo[7464:207110] age  : ,, 31

2.范围运算符:IN、BETWEEN

例:@"number BETWEEN {1,5}"
      @"address IN {‘shanghai‘,‘beijing‘}"

IN:

NSArray *array = [[NSArray alloc]initWithObjects:@"beijing",@"shanghai",@"guangzou",@"wuhan", nil];

NSString *string = @"ang";

NSPredicate *pred = [NSPredicate predicateWithFormat:@"%@ in SELF",string];

NSLog(@"%@",[array filteredArrayUsingPredicate:pred]);

Log:

2015-09-22 16:02:51.360 CoreDataDemo[7765:215760] (

    shanghai,

    guangzou

)

bewteen:

NSPredicate *  predicate = [NSPredicate predicateWithFormat:

@"age BETWEEN { 31, 34 }"];

NSArray *results = [people filteredArrayUsingPredicate: predicate];

for (Person *people in results) {

NSLog(@"李  : %@ ,%@, %@", people.firstName,people.lastName,people.age);

}

log:

2015-09-22 16:11:14.634 CoreDataDemo[7984:222771]   : ,, 34

2015-09-22 16:11:14.634 CoreDataDemo[7984:222771]   : ,, 31

3.字符串本身:SELF

例:@“SELF == ‘APPLE’"

4.字符串相关:BEGINSWITH、ENDSWITH、CONTAINS

例:@"name CONTAIN[cd] ‘ang‘"   //包含某个字符串
       @"name BEGINSWITH[c] ‘sh‘"     //以某个字符串开头
       @"name ENDSWITH[d] ‘ang‘"      //以某个字符串结束
        注:[c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,也不区分发音符号。

5.通配符:LIKE
例:@"name LIKE[cd] ‘*er*‘"    //*代表通配符,Like也接受[cd].
       @"name LIKE[cd] ‘???er*‘"

时间: 2024-10-18 15:57:21

NSPredicate 详解的相关文章

iOS开发——数据持久化OC篇&amp;(六)CoreData详解

CoreData详解 介绍: 在Cocoa环境下,如果你想使用数据库(如sqlite),你可以使用sql语句的方式通过相关的工具类进行数据库的直接操作.当然你也可以通过别人封装之后的一些简单框架,使得你的操作更加简单(如FMDB BNRPersistence). Cocoa框架本身提供了CoreData这个API可方便的让开发者通过操作对象的方式在操作数据库.CoreData是一个对象图(object graph)以及持久化的管理框架.我们可以通过CoreData创对象,设置好象之间的关系,然后

iOS CoreData详解(四)Faulting and Uniquing

原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言,faulting 和 uniquing是理解CoreData的两个比较关键的概念,这里详细的讲解一下. 先简单看看二者的概念 faulting 是一种CoreData降低内存使用的机制,是惰性加载的一种. Uniquing是辅助faulting的机制,它保

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h

MariaDB(MySQL)创建、删除、选择及数据类型使用详解

一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB. MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL A

HttpServletResponse和HttpServletRequest详解

HttpServletResponse,HttpServletRequest详解 1.相关的接口 HttpServletRequest HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据.同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求并且接收请求的服务器端主机名及IP地址,还可以获取客户端正在使用的通信协议等信息.下表是接口HttpServletRequest的常用方法. 说明:HttpServ

POSIX 线程详解(经典必看)

总共三部分: 第一部分:POSIX 线程详解                                   Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  2000 年 7 月 01 日 第二部分:通用线程:POSIX 线程详解,第 2部分       Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  20

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

阅读目录: 1.环路执行对象模型.碎片化执行模型(假递归式调用) 2.N层对象执行模型(纵横向对比链式扩展方法) 3.LINQ查询表达式和链式查询方法其实都是空壳子 4.详细的对象结构图(对象的执行原理) 5.IQueryable<T>与IQueryProvider一对一的关系能否改成一对多的关系 6.完整的自定义查询 1]. 环路执行对象模型.碎片化执行模型(假递归式调用) 这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频

netstat状态详解

一.生产服务器netstat tcp连接状态................................................................................ 2 1.1生产服务器某个业务LVS负载均衡上连接状态数量............................................... 2 1.2生产服务器某个业务web上连接状态数量...............................................