filteredArrayUsingPredicate не работает

Я пытаюсь использовать filteredArrayUsingPredicate с массивом, созданным из данных в файле .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];
}

person stuart    schedule 01.02.2011    source источник


Ответы (2)


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

Вместо этого используйте следующее:

[tableDataSource filterUsingPredicate:pred];
person Georg Fritzsche    schedule 01.02.2011

Я думаю, вам нужны кавычки вокруг строки, которую вы подставляете в метод predicateWithFormat:. то есть:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"я начинается с[c] \"%@\"",searchFor];

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

person James Bedford    schedule 01.02.2011