2014-10-29 18 views
0

我想了解NSPredicate和它的語法,使用ALL/ANY/NONE,當我們使用ALL/ANY等在NSPredicate

我的類人:

@interface Person : NSObject 

@property (nonatomic, strong) NSString* name; 
@property (nonatomic, strong) NSString* surname; 
@property NSUInteger age; 
@property NSUInteger weight; 
@property NSUInteger height; 

我用它謂詞是這樣的:

NSArray* persons = [NSArray arrayWithObjects:personOne, personTwo, personThree, personFour, nil]; 

我斷言:

NSPredicate* predicateEight = [NSPredicate predicateWithFormat:@"ANY SELF.age > %@", @55]; 
filteredArray = [persons filteredArrayUsingPredicate:predicateEight]; 
NSLog(@"Age > 55 %@", filteredArray); 

而且我收到了一個錯誤:

左手邊爲ALL或ANY運算符必須是一個 的NSArray或NSSet中

我需要怎麼改變我的代碼? 在此先感謝您的幫助。

回答

0

ALL/ANY用於NSArray的或NSSet中。在你的情況下,任何用於Person的實例。使用

例ANY:

NSPredicate* predicateEight = [NSPredicate predicateWithFormat:@"ANY SELF.age > %@", @55]; 
BOOL result = [predicateEight evaluateWithObject:persons]; 

如果你有個人的陣列(數組的數組):

NSArray* group1 = [NSArray arrayWithObjects:personOne, personTwo, personThree, nil]; 
NSArray* group2 = [NSArray arrayWithObjects:personFour, personFive, personSix, nil]; 
NSArray* group3 = [NSArray arrayWithObjects:personSeven, personEight, personNine, nil]; 

NSArray* groups = [NSArray group1, group2, group3, nil]; 

NSPredicate* predicateEight = [NSPredicate predicateWithFormat:@"ANY SELF.age > %@", @55]; 

NSArray* filteredArray = [groups filteredArrayUsingPredicate:predicateEight]; 
+0

Вадим,Выбяка:) Нопотеме,согласен)))))))))) – 2014-10-30 13:30:28

1

應該是這樣的:

NSPredicate* predicateEight = [NSPredicate predicateWithFormat:@"self.age > %d", 55]; 
+0

謝謝您的回答,但它使用的經典。 如果我想完全使用ALL/ANY(瞭解可以使用它的位置),它將如何顯示?也許我需要添加一些結構? – 2014-10-29 12:58:12