Результаты поиска всегда равны 0 (NSArray и NSPredicate) - PullRequest
0 голосов
/ 29 октября 2010

У меня есть NSArray, который содержит Foo объекты, определенные так:

@interface Foo : NSObject <NSCopying> {
    NSString *name;
}
@property (nonatomic, retain) NSString *name;
@end

и запрос:

NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] %@", filterString];
//NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] %@", filterString];
filteredArray = [[originalArray filteredArrayUsingPredicate:filterPredicate] mutableCopy];

и это не работает. Я всегда получаю 0 результатов.

Итак, мой вопрос:

Должен ли я всегда использовать NSPredicate для поиска только NSDictionary объектов с определенным ключом или я могу использовать его для поиска любого объекта, если есть свойство / метод, который соответствует запросу (в данном случае: name)

Заранее спасибо

1 Ответ

2 голосов
/ 29 октября 2010

Ваш код правильный.Я попробовал:

@interface Foo : NSObject

@property (nonatomic, retain) NSString * name;

@end
@implementation Foo

@synthesize name;

@end

NSMutableArray * a = [NSMutableArray array];
for (int i = 0; i < 100; ++i) {
    Foo * f = [[Foo alloc] init];
    [f setName:[NSString stringWithFormat:@"%d", i]];
    [a addObject:f];
    [f release];
}

NSPredicate * p = [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] %@", @"1"];
NSArray * filtered = [a filteredArrayUsingPredicate:p];
NSLog(@"%@", [filtered valueForKey:@"name"]);

Журналы:

2010-10-29 10:51:22.103 EmptyFoundation[49934:a0f] (
    1,
    10,
    11,
    12,
    13,
    14,
    15,
    16,
    17,
    18,
    19
)

Что заставляет меня спросить: Ваш originalArray пуст?

...