iOS 谓词讲解
(1)比较运算符
1.比较运算符 > 、< 、== 、 >= 、<= 、 !=
运算符还可以跟逻辑运算符一起使用,&& , || ,AND, OR 谓词不区分大小写
NSPredicate *p = [NSPredicate predicateWithFormat:@"age >= 18 && name = '周周'"];
//根据谓词要求返回响应数组
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
// [self.dataList filterUsingPredicate:p];
IN:等于SQL的IN操作,左边的表达必须出现在右边指定的集合中。
BETWEEN:左边的表达式等于右边的表达式的值或者介于它们之间,右边是一个有两个指定上限和下限的数值的数列(指定顺序的数列)
NSPredicate * p = [NSPredicate predicateWithFormat:@"age BETWEEN {30,60}"];
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
(3)头尾查询
以xx开头 --BEGINSWITH
以xx结尾 --ENDSWITH
NSPredicate * p = [NSPredicate predicateWithFormat:@"name BEGINSWITH '大' || name ENDSWITH %@",@"露"];
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
(4)包含查询
包含CONTAINS:左边的表达式包含右边的表达式。
NSPredicate * p = [NSPredicate predicateWithFormat:@"%K CONTAINS %@",@"name",@"欢”];
NSPredicate * p = [NSPredicate predicateWithFormat:@"%K CONTAINS '欢'",@"name"];
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
LIKE:左边的表达式等于右边的表达式
*表示零个或多个字符
?表示一个字符
// NSPredicate * p = [NSPredicate predicateWithFormat:@"name LIKE '*欢*'"];
NSPredicate * p = [NSPredicate predicateWithFormat:@"name LIKE '?欢*'"];
NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];
(6)字符串本身查询
//字符串本身查询,数组里的每一项是字符串,才能用SELF查询
NSArray * names = @[@"大欢",@"周周",@"露露",@"饭饭",@"欢哥"];
// NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF = '大欢'"];
NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",@"欢"];
NSArray * personList = [names filteredArrayUsingPredicate:p];
(7)正则表达式:MATCHES
NSString *pattern = @"^((13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern];
//传入对象是否匹配正则表达式的谓词
BOOL isTelNumber = [p evaluateWithObject:@"118260930"];
if (isTelNumber) {
NSLog(@"是手机号");
} else {
NSLog(@"不是手机号");
}
2、UISearchController搜索控制器
(1)第一种形式
//创建一个接受结果并展示的表格控制器
SearchResultViewController * resultVC = [[SearchResultViewController alloc] initWithStyle:UITableViewStylePlain];
//创建搜索控制器
UISearchController * searchVC = [[UISearchController alloc] initWithSearchResultsController:resultVC];
//设置数据更新代理
searchVC.searchResultsUpdater = self;
//使用模态视图跳转到搜索控制器
[self presentViewController:searchVC animated:YES completion:nil];
//通过searchBar得到输入的文字
NSString * searchString = searchController.searchBar.text;
//过滤搜索内容
[self updateFilterContent:searchString];
//self.resultList已经有搜索到的值了
//判断是否searchController存在searchResultsController
if (searchController.searchResultsController) {
//通过searchResultsController得到SearchResultViewController的引用
SearchResultViewController * searchResultVC = (SearchResultViewController *)searchController.searchResultsController;
//给搜索结果控制器赋数据源
searchResultVC.searchResults = self.resultList;
//将搜索结果控制器刷新表格
[searchResultVC.tableView reloadData];
- (void)updateFilterContent:(NSString *)searchString {
//[c] 不区分大小写
NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@",searchString];
self.resultList = [self.dataList filteredArrayUsingPredicate:p];
}
(2)第二种形式
#warning 一定要将UISearchController对象设置成全局变量
self.tableView.tableHeaderView = self.searchVC.searchBar;
iOS 谓词讲解的更多相关文章
- IOS NSUserDefaults 讲解 用法
IOS NSUserDefaults 讲解 用法 NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults ...
- iOS:转载:IOS谓词--NSPredicate
IOS谓词--NSPredicate 分类: IOS应用2013-02-19 17:24 6792人阅读 评论(1) 收藏 举报 Cocoa 提供了NSPredicate 用于指定过滤条件,谓词是指在 ...
- ios - 谓词的使用
谓词在搜索的时候非常管用.简单示例代码如下: 分类Person.h文件 #import <Foundation/Foundation.h> @interface Person : NSOb ...
- IOS 谓词
// 谓词 Person *person = [[Person alloc]init]; person.name = @"zhang san"; person.age = 20; ...
- iOS开发讲解SDWebImage,你真的会用吗?
SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高.但是你真的会用吗?本文接下来将通过例子分析如何合理使用SDWebImage. 使用场景:自定义的UITableViewCell上有 ...
- iOS 谓词(NSPredicate)的应用
Cocoa中谓词(Predicate)提供了一个通用的查询方式处理数据,可以获取和指定数据的过滤形式,Cocoa实际开发中可以是使用NSPredicate及其父类NSComparisonPredica ...
- ios 深入讲解iOS键盘一:控制键盘隐藏显示
在iOS的开发中,我们一般使用UITextField.UITextView处理文字输入等操作,大部分情况下我们只需要一两行代码去手动管理键盘的显示隐藏:让UITextField或UITextView成 ...
- ios开发讲解之anchorPoint和position详解
引言 相信初接触到CALayer的人都会遇到以下几个问题: 为什么修改anchorPoint会移动layer的位置? CALayer的position点是哪一点呢? anchorPoint与posi ...
- iOS 多线程讲解2
1.GCD其他方法 1.GCD应用 单例模式 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@&qu ...
随机推荐
- 思科ASA系列防火墙配置手册
使用console连接线登录方法 1.使用cisco的console连接线,连接设备的console口和计算机com口(笔记本用USB转COM口连接线)2.使用超级终端或secureCRT软件连接设备 ...
- Windows 7 不同安装模式简要区别(图解)
★ 你可能对GHOST不支持AHCI感到迷惑,实际上,写过GHOST一键安装批处理的都知道一个叫FINDCD.EXE的小程序,可是这个程序老 了,AHCI模式光驱他找不到了,找不到光驱动意味着光盘中G ...
- iOS KVC/KVO/KVB
看了那么多博客.描述那么复杂,其实KVC很简单,没描述的那么复杂,所以写一篇简单的易于理解的博文,切入正文: 1.KVC底层是通过runtime对method和value操作 比如说如下的一行KVC ...
- Uvalive 4865 Data Recovery 最大流
题意就是 给一个50 * 50的矩阵 然后给出每行每列元素的和 和一个初始矩阵 矩阵中有些是未知,有些是已知 然后我们求目标矩阵就是把能确定的元素的值求出来,实在不能确定的就置为-1 所有矩阵元素的值 ...
- HDU 1394Minimum Inversion Number(线段树)
题目大意是说给你一个数组(N个),没戏可以将其首部的k(k<N)个元素移动至尾部,这样总共会形成N个序列 现在要求这n个序列中逆序对数最少的那一个序列有多少个逆序对 最初的确是没太多思路,就算知 ...
- UVa 1620 Lazy Susan (找规律)
题意:给 n 个数,每次可以把4个连续的数字翻转,问你能不能形成1-n的环状排列. 析:找一下奇偶性,写几个数试试,就会找到规律. 代码如下: #include <cstdio> #inc ...
- 深入浅出Spring(四) Spring实例分析
上次的博文中 深入浅出Spring(二) IoC详解 和 深入浅出Spring(三) AOP详解中,我们分别介绍了一下Spring框架的两个核心一个是IoC,一个是AOP.接下来我们来做一个Sprin ...
- MFC中OnDraw()和OnPaint()的区别[转]
问题 问题:我在视图画的图象或者文字,当窗口改变后为什么不见了?OnDraw()和OnPaint()两个都是解决上面的问题,有什么不同? OnDraw()和OnPaint()好象兄弟俩,因为它们的工作 ...
- (剑指Offer)面试题18:树的子结构
题目: 输入两棵二叉树A和B,判断B是不是A的子结构. 二叉树结构定义如下: struct TreeNode{ int val; TreeNode* left; TreeNode* right; }; ...
- 设置文字在div中垂直居中,使用line-height
(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-02-19) line-height 行间距 详细使用方法:http://www.w3school.com.cn/css/pr ...