2014-10-21 4 views
0

У меня объект NSObject для хранения некоторых данных, как имя, идентификатор от сервераФильтрация NSMutableArray из NSDictionary с NSPredicate

NSObject файл выглядит, как показано ниже,

@interface MyEntity : NSObject 
@property(nonatomic,strong)NSString *userId; 
@property(nonatomic,strong)NSString *userName; 
- (id)initWithJSON:(NSDictionary *)dataDict; 
@end 

- (id)initWithJSON:(NSDictionary *)dataDict 
{ 
    if (self = [super init]) 
    { 
     self.userId = [dataDict objectForKeyNotNull:@"userId"] ; 
     self.userName = [dataDict objectForKeyNotNull:@"userName"] ; 
    } 
    return self; 
} 

Я хранения значений из сервера к NSMutableArray посредством,

NSMutableArray *array = [[NSMutableArray alloc] initWithArray:responseData[@"result"]]; 
for (NSDictionary *dict in array) { 
     MyEntity *ent = [[MyEntity alloc] initWithJSON:dict]; 
     [myArray addObject:ent]; 
} 

Теперь я хочу, чтобы фильтровать эту NSMutableArray некоторых имен пользователей с использованием NSPredicate. Я пробовал под кодом,

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY MyEntity.userName == %@", @"popo"]; 
NSArray *predicateFilteredArray = [myArray filteredArrayUsingPredicate:predicate]; 
[myArray removeAllObjects]; 
[myArray addObjectsFromArray:predicateFilteredArray]; 

не работает. Как я могу это достичь?

ответ

4

Вам просто не нужно, чтобы проверить предикат с именем объекта написать простой предикат, и он будет работать, я имею в виду заменить код

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY MyEntity.userName == %@", @"popo"]; 

С

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName == %@", @"popo"]; и он будет работать.

+0

Я считаю, что это должно быть SELF.userName LIKE OR MATCH. вы сравниваете NSStrings, вы не можете использовать проверку равенства в NSString – Lefteris

+1

'' userName ==% @ "' должно работать, я не думаю, что вам нужно добавить «SELF». И вы * можете * сравнить строки для равенства в предикате. –

+0

Я проверил и проверил его, он отлично работает. – iHulk

Смежные вопросы