我无法理解如何使用谓词,我有一个很长的代码来按照属性“类型”从数组中过滤对象,然后我突然看到方法“filteredArrayUsingPredicate”可以让我的生活变得更好。我尝试写谓词,但我总是得到错误;有人可以告诉我如何写出来吗?
我有方法- (void) filterData: (NSString *)filteredWord
:
我也有对象数组(事件): NSArray * eventsArray 。 我想使用filteredArrayUsingPredicate来获取带有对象(Event)的新数组,其中它们的属性(类型)等于filterWord。请注意,Event是Core Data Managed子类。
甚至可以用谓词来做这个吗?
我的一次尝试:
NSString *propertyName = @"type";
NSArray *eventsArray = [[[[self currentPerson] events] objectEnumerator]allObjects];
NSPredicate *predicte = [NSPredicate predicateWithFormat:@"%k like '%@'",propertyName,filteredWord];
[eventsArray filteredArrayUsingPredicate:predicte];
答案 0 :(得分:2)
试试这个:
NSString *propertyName = @"type";
NSArray *eventsArray = [[[self currentPerson] events] allObjects];
NSPredicate *predicte = [NSPredicate predicateWithFormat:
@"%k like %@",propertyName, filteredWord];
NSArray *filteredArray = [eventsArray filteredArrayUsingPredicate:predicte];
您忽略过滤后的结果。 filteredArrayUsingPredicate:
返回NSArray
的新实例。它不会过滤原件
数组到位,因为NSArray
对象是不可变的。你要么
必须做一个
NSMutableArray
然后使用filterUsingPredicate:
过滤数组,或者
你必须对返回的数组做一些事情
filteredArrayUsingPredicate:
(记录,保存等等)
请勿在酒店周围使用单引号。 (感谢线索@MartinR)