2009-07-12 6 views
4

Je joue avec l'exemple d'application TableSearch d'Apple.iPhone SDK - TableSearch - Rechercher tous les mots au lieu de seulement le premier

Dans leur application, ils ont un tableau avec des produits Apple. Il y a une rangée avec "iPod touch". Lorsque vous recherchez "toucher", aucun résultat n'est affiché.

Quelqu'un peut-il m'aider à faire en sorte que tous les mots de chaque ligne puissent être recherchés? Alors que les résultats sont trouvés lors de la recherche de "iPod", mais aussi pour le mot-clé "tactile".

Cheers.

Répondre

14

est inférieur au code correspondant dans le procédé filterContentForSearchText:scope: dans MainViewController.m:

NSComparisonResult result = [product.name compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])]; 
if (result == NSOrderedSame) 
{ 
    [self.filteredListContent addObject:product]; 
}

En comparaison, les premiers n caractères (spécifiée par le paramètre de gamme), en ignorant la casse et diacritiques, de chaque chaîne avec la première n caractères de la chaîne de recherche actuelle, où n est la longueur de la chaîne de recherche actuelle.

Essayez de changer le code à ce qui suit:

NSRange result = [product.name rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)]; 
if (result.location != NSNotFound) 
{ 
    [self.filteredListContent addObject:product]; 
}

Cette recherche dans chaque chaîne pour la chaîne de recherche en cours.

+0

Merci beaucoup. Cela fonctionne très bien! Il recherche maintenant dans les chaînes, donc avec l'exemple ci-dessus il trouve "iPod touch" même avec "ouch" comme mot-clé. Mais ce n'est pas un gros problème pour moi. – nicoko

+0

Dans ce cas, veuillez marquer ma réponse comme acceptée. Merci. – titaniumdecoy

+0

Merci pour l'extrait. Fonctionne bien! – jfroom

Questions connexes