2011-11-30 96 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。我很快就會趕上,我希望。 –