2011-11-30 141 views
1

我以前从未使用NSPredicate,因此请耐心等待。我有一个数组,其布尔键为“isChecked”。我想过滤布尔值设置为“YES”的数组,任何想法我该怎么做,再加上是否有任何对这样的查询方法的引用,这些方法很好用。NSPredicate过滤器

谢谢

+0

你一起使用这个核心数据,或者您想要一个子集符合您的条件你只是有一个'NSArray'实例? –

+0

@craig我有一个NSArray的实例,我想要一个符合我的标准的子集。谢谢。 – kforkarim

回答

5
//NSArray * myArray is your array 
//containing your objects that each have an isChecked property 


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isChecked == YES"]; 
NSArray *filteredArray = [myArray filteredArrayUsingPredicate:predicate]; 

// filteredArray is the new array that only contains your checked items 

干杯

+0

Upvoted,因为伟大的思想家都认为。相同的变量名称和一切。 :) –

+1

我曾试过,它没有奏效,但当我试过NSPredicate *谓词= [NSPredicate predicateWithFormat:@“isChecked =='YES'”];它确实,想知道有什么区别? – kforkarim

+0

这很奇怪。我实际上使用了这个确切的谓词,它在我的应用程序中起作用。 –

3

首先您创建NSPredicate实例。在这种情况下,我们将使用-initWithFormat:

NSPredicate *predicate = [[NSPredicate alloc] initWithFormat:@"isChecked == YES"];

然后我们会使用NSArray-filteredArrayUsingPredicate:方法来获取匹配谓词其所有对象的一个​​NSArray。

NSArray *filteredArray = [originalArray filteredArrayUsingPredicate:predicate];

+0

你在这里泄漏你的谓词。如果使用类方法[NSPredicate predicateWithFormat:],则不必担心谓词的内存管理。 –

+0

现在是2011年。我假设现在大多数人都在使用ARC或了解基本的内存管理。继续前进。 –

+0

LOL我正在管理旧的应用程序,甚至还没有开始使用ARC。我很快就会赶上,我希望。 –