Запрос основных данных с помощью Predicates - iPhone

Итак, я пытаюсь извлечь объекты из основных данных. У меня есть список из 80 объектов, и я хочу, чтобы их можно было просмотреть с помощью UISearchBar. Они отображаются в таблице.

Используя документацию Apple по предикатам, я поместил следующий код в один методов делегата UISearchBar.

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
  if (self.searchBar.text !=nil)
  {
    NSPredicate *predicate =[NSPredicate predicateWithFormat:@"name LIKE %@", self.searchBar.text];
    [fetchedResultsController.fetchRequest setPredicate:predicate];
  }
  else
  {
    NSPredicate *predicate =[NSPredicate predicateWithFormat:@"All"];
    [fetchedResultsController.fetchRequest setPredicate:predicate];
  }

  NSError *error = nil;
  if (![[self fetchedResultsController] performFetch:&error]) {
        // Handle error
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();  // Fail
    }       

  [self.tableView reloadData];

    [searchBar resignFirstResponder];   
    [_shadeView setAlpha:0.0f];
}

Если я нахожу в поле поиска точное совпадение с свойством имени одного из этих объектов, поиск работает, и он повторно заполняет таблицу одной ячейкой с именем объекта. Если я не ищу точное имя, я не получаю никаких результатов.

Любые мысли?

Ответ 1

Кажется, что iPhone не нравится оператор LIKE. Я заменил его на "contains [cd]", и он работает так, как я этого хочу.

Ответ 2

use содержит [cd] вместо имени и меняет:

NSPredicate *predicate =[NSPredicate predicateWithFormat:@"All"];

в

NSPredicate *predicate =[NSPredicate predicateWithFormat:@"1=1"];

Ответ 3

Вы пытались использовать MATCH и регулярные выражения? Просто любопытно узнать, не нравится ли LIKE на iPhone или нет...

Ответ 4

В типичном приложении Core Data удалять NSF fetchedResultsController:

[NSFetchedResultsController deleteCacheWithName: [self.fetchedResultsController cacheName]];

Или вы получите исключение (в идеале) или у вас будет странное поведение.