Ответ 1
Кажется, что iPhone не нравится оператор LIKE. Я заменил его на "contains [cd]", и он работает так, как я этого хочу.
Итак, я пытаюсь извлечь объекты из основных данных. У меня есть список из 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];
}
Если я нахожу в поле поиска точное совпадение с свойством имени одного из этих объектов, поиск работает, и он повторно заполняет таблицу одной ячейкой с именем объекта. Если я не ищу точное имя, я не получаю никаких результатов.
Любые мысли?
Кажется, что iPhone не нравится оператор LIKE. Я заменил его на "contains [cd]", и он работает так, как я этого хочу.
use содержит [cd] вместо имени и меняет:
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"All"];
в
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"1=1"];
Вы пытались использовать MATCH и регулярные выражения? Просто любопытно узнать, не нравится ли LIKE на iPhone или нет...
В типичном приложении Core Data удалять NSF fetchedResultsController:
[NSFetchedResultsController deleteCacheWithName: [self.fetchedResultsController cacheName]];
Или вы получите исключение (в идеале) или у вас будет странное поведение.