美文网首页iOS随心记_夏点
NSPredicate过滤数据(自己分离后台数据)

NSPredicate过滤数据(自己分离后台数据)

作者: 夏点 | 来源:发表于2016-07-19 18:47 被阅读135次

刚开始接触这个类是在textfield中正则表达时验证输入文本的状态下,例子:

 NSString * pattern = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[06-8])\\d{8}$";

 NSPredicate * pred=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern];

通过正则表达式判断所输入字符是否符合规范

1、然而还是小看了这个类,过滤作用十分强大,有好多的关键字

举个例子:

加入app中某一接口中有4张图片,而要求分成俩组,后台会给你一个字段作为标识进行分组

模拟一下json解析下来数据创建个字典

NSDictionary *dic= @{

@"picture":@[

@{

@"groupId" : @"1",

@"picUrl" : @"app/pic1.jpg"

},

@{

@"groupId" : @"1",

@"picUrl" : @"app/pic2.jpg"

},

@{

@"groupId" : @"2",

@"picUrl" : @"app/pic3.jpg"

},

@{

@"groupId" : @"2",

@"picUrl" : @"app/pic4.jpg"

}

]

};

用数据时你会建立一个模型来接收数据,模型就叫picModel吧

@property(nonatomic,strong)NSString *picUrl;

@property(nonatomic,strong)NSString *groupId;

我们创建一个可变数组把模型都存进去mutableArr,这里有4个picModel

NSArray *dataArr=dic[@"picture"];

NSMutableArray *mutableArr=[[NSMutableArray alloc]init];

for (NSDictionary *dic in dataArr) {

picModel *pm=[[picModel alloc]init];

pm.picUrl=dic[@"picUrl"];

pm.groupId=dic[@"groupId"];

[mutableArr addObject:pm];

}

//这时打印的数组元素个数是4个

NSLog(@"%zd",mutableArr.count);

创建一个谓词规则 就是groupId为1的过滤出来因为1是NSString类型所以得加引号那么写

NSPredicate *preGroup1=[NSPredicate predicateWithFormat:@"self.groupId='1'"];

NSPredicate *preGroup2=[NSPredicate predicateWithFormat:@"self.groupId='2'"];

重写一下description

-(NSString *)description{

[super description];

return [NSString stringWithFormat:@"ID=%@,URL=%@",self.groupId,self.picUrl];

}

运用规则得出对应数组 

NSArray *group1=[mutableArr filteredArrayUsingPredicate:preGroup1];

NSArray *group2=[mutableArr filteredArrayUsingPredicate:preGroup2];

NSLog(@"group1=%@",group1);

NSLog(@"group2=%@",group2);

打印出来看结果发现被分成俩组了

group1=(

"ID=1,URL=app/pic1.jpg",

"ID=1,URL=app/pic2.jpg"

)

group2=(

"ID=2,URL=app/pic3.jpg",

"ID=2,URL=app/pic4.jpg"

)

NSPredicate还有很多关键字 像contains,like等有些实际需求会用到

相关文章

网友评论

  • 丶余晖:不知道为啥我按照你的写法筛选数据总是报错。
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.class_id=’11290’"];
    NSArray *arr = [self.goodsArr filteredArrayUsingPredicate:predicate];
    我要把模型里class_id等于11290的数据都放到一个数组里,但是总是报错

本文标题:NSPredicate过滤数据(自己分离后台数据)

本文链接:https://www.haomeiwen.com/subject/jgwmjttx.html