2009-06-19 9 views
10

J'essaie donc de récupérer des objets à partir de données de base. J'ai une liste de disons 80 objets, et je veux être capable de les chercher en utilisant un UISearchBar. Ils sont affichés dans une table. En utilisant la documentation apple sur les prédicats, j'ai mis le code suivant dans un des méthodes de délégué UISearchBar.Demande de données de base avec des prédicats - iPhone

- (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]; 
} 

Si je tape dans le champ de recherche une correspondance exacte à la propriété du nom d'un de ces objets, la recherche fonctionne, et il repeuple la table avec une seule cellule avec le nom de l'objet. Si je ne recherche pas le nom exact, je me retrouve sans résultat.

Des pensées?

+0

désolé de l'absence de formatage sur le code, j'ai oublié d'ajouter le code exemple de balises – gburgoon

+0

Vous pouvez éditer votre message pour mettre en forme le code correctement ... – CMPalmer

Répondre

15

Il semble que l'iPhone n'aime pas l'opérateur LIKE. Je l'ai remplacé par 'contains [cd]' et ça fonctionne comme je le veux.

1

L'avez-vous essayé en utilisant MATCH et des expressions régulières? Juste curieux de voir si, comme quelque chose qui doit être évité sur l'iPhone ou non ...

+1

Ya, match provoque une exception à être levé. C'est tout simplement étrange car Apple utilise beaucoup l'opérateur LIKE dans sa documentation, mais cela ne fonctionne pas comme il le dit. – gburgoon

5

utilisation contient [cd] au lieu de comme, et le changement:

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

à:

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

1

en application typique de base de données il faut supprimer NSF fetchedResultsController:

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

Ou bien vous obtiendrez une exception (idéalement) ou vous aurez un comportement étrange.

Questions connexes