使用filteredArrayUsingPredicate方法通过属性过滤数组中的对象

时间:2012-12-16 13:17:13

标签: objective-c ios nsarray nspredicate predicatewithformat

我无法理解如何使用谓词,我有一个很长的代码来按照属性“类型”从数组中过滤对象,然后我突然看到方法“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];

1 个答案:

答案 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)