2

我不明白如何使用谓词,我有一个很长的代码来按属性“类型”从数组中过滤对象,突然我看到了可以让我的生活变得更好的方法“filteredArrayUsingPredicate”。我尝试编写谓词,但总是出错;有人可以告诉我如何正确写吗?

我有方法- (void) filterData: (NSString *)filteredWord

我也有对象数组(事件):NSArray *eventsArray。我想使用filteredArrayUsingPredicate 来获取带有对象(事件)的新数组,其中它们的属性(类型)等于filterWord。请注意,事件是核心数据托管子类。

甚至可以用谓词做到这一点吗?

我的尝试之一:

NSString *propertyName = @"type";
NSArray *eventsArray = [[[[self currentPerson] events] objectEnumerator]allObjects];
NSPredicate *predicte = [NSPredicate predicateWithFormat:@"%k like '%@'",propertyName,filteredWord];
[eventsArray filteredArrayUsingPredicate:predicte];
4

1 回答 1

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 的线索)

于 2012-12-16T13:40:47.153 回答