FilterArrayUsingPredicate не работает - PullRequest
       14

FilterArrayUsingPredicate не работает

1 голос
/ 01 февраля 2011

Я пытаюсь использовать FilterArrayUsingPredicate с массивом, который был построен из данных в файле .plist. Каким-то образом это никогда не фильтрует мой массив.

Вот как построен мой массив:

    DrillDownAppAppDelegate *AppDelegate = (DrillDownAppAppDelegate *)[[UIApplication sharedApplication] delegate];
    self.tableDataSource = [AppDelegate.data objectForKey:@"Rows"];
    copyDataSource = [ tableDataSource mutableCopy];

и тогда мой предикат выглядит так,

NSString *searchFor = search.text;
[tableDataSource release];
tableDataSource = [copyDataSource mutableCopy];
if ([searchFor length] > 0) {
NSLog(@"array = %@",tableDataSource);
NSPredicate *pred = [NSPredicate predicateWithFormat:@"Self beginswith[c] %@",searchFor];
    [tableDataSource filteredArrayUsingPredicate:pred];
}

Ответы [ 2 ]

6 голосов
/ 01 февраля 2011
  • -[NSArray filteredArrayUsingPredicate:] возвращает новый массив , который содержит результаты
  • -[NSMutableArray filterUsingPredicate:] фильтры на месте.

Так что используйте вместо этого:

[tableDataSource filterUsingPredicate:pred];
1 голос
/ 01 февраля 2011

Я думаю, вам нужно заключить в кавычки строку, которую вы подставили в метод предиката с формой: то есть:

NSPredicate * pred = [NSPredicate предикатWithFormat: @ "self beginwith [c] \"% @ \ "", searchFor];

Также попробуйте использовать слово «self» в качестве всех строчных букв, как в ключевом слове «self», и помните, что экземпляры объектов действительно должны начинаться со строчной буквы. Например, «appDelegate».

...