Recherche auto-complétée

Bonjour à  tous,



Dans mon application j'ai actuellement une liste de plats récupérée d'un fichier JSON et stockée dans un fichier texte dans mon projet.



Cette recherche est auto-complétée. Cependant elle récupère (par exemple) tous les plats contenant la lettre "a" et j'aimerais qu'elle récupère seulement ceux commençant par la lettre "a" ...



Voici mon code :


<br />
- (void)comparerStringSaisieAvecTableau:(NSString *)substring<br />
{<br />
[autoCompletionArray removeAllObjects];<br />
    NSString *compareString;<br />
for(compareString in elementArray)<br />
    {<br />
	    NSRange rang = [compareString rangeOfString:@&quot;=&quot;];<br />
	    int l = rang.location + 1;<br />
	    NSString *monSub = [compareString substringFromIndex:l];<br />
  NSRange substringRangeLowerCase = [[self enleverAccent:monSub] rangeOfString:[[self enleverAccent:substring] lowercaseString]];<br />
  NSRange substringRangeUpperCase = [[self enleverAccent:monSub] rangeOfString:[[self enleverAccent:substring] uppercaseString]];<br />
	   <br />
  if (substringRangeLowerCase.length &#33;= 0 || substringRangeUpperCase.length &#33;= 0)<br />
	    {<br />
   [autoCompletionArray addObject:compareString];<br />
  }<br />
}<br />
   <br />
tableauResultat.hidden = NO;<br />
[tableauResultat reloadData];<br />
}<br />




Si quelqu'un avait une solution ce serait plutôt cool !!!



Merci d'avance

Réponses

  • Bonjour,



    L'usage est que le premier message soit sa présentation dans la section adéquate.
  • muqaddarmuqaddar Administrateur
    Ton code m'a l'air bien compliqué...

    Regarde du côté de NSPredicate si tu ne connais pas.
  • 'Eric a écrit:


    Bonjour,



    L'usage est que le premier message soit sa présentation dans la section adéquate.




    Alors là  je n'ai pas compris "sa présentation dans la section adéquate" ...




    'muqaddar' a écrit:


    Ton code m'a l'air bien compliqué...

    Regarde du côté de NSPredicate si tu ne connais pas.




    Je vais regarder ça merci.
  • muqaddarmuqaddar Administrateur
    Il te disait juste d'aller te présenter dans la section "Présentation des membres".
  • 'soussou' a écrit:


    Alors là  je n'ai pas compris "sa présentation dans la section adéquate" ...




    Oui j'ai répondu rapidement et cela m'avait également semblé être tourné bizarrement.

    Donc ce n'était pas qu'une impression.

    Mais muqaddar a compris.
  • Ah d'accord ! Oui désolé je n'avais pas compris et j'ai regardé rapidement.

    Je vais donc faire ça tout de suite.



    En ce qui concerne mon code, il vaut mieux complètement le reprendre ? Aucune modification ne suffirait à  seulement chercher les éléments commençant pas la lettre et non contenant la lettre ?

    Je pensais à  "hasPrefix" au lieu de "rangeOfString" ...
  • Up ...
  • CéroceCéroce Membre, Modérateur
    NSPredicate est plus simple et plus performant: ça compare sans accents, ça te retourne directement un NSArray filtré.

    Ton code reste assez court, je ne crois pas que ce soit un gros sacrifice de le remplacer par du code utilisant NSPredicate, si ?
  • Si j'ai bien compris NSPredicate fonctionne avec la BDD et il faut faire une sorte de requête dans predicateWithFormat ?

    On ne peut pas juste donner un string comme predicateWithFormat:@%@", monString ?
  • Bon finalement j'ai fait comme ça :


    <br />
    //Comparer le string saisie par l&#39;utilisateur avec les élements du tableau<br />
    - (void)comparerStringSaisieAvecTableau:(NSString *)substring<br />
    {<br />
        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;<br />
    [autoCompletionArray removeAllObjects];<br />
        NSString *compareString;<br />
    for(compareString in elementArray)<br />
        {<br />
    	    //compareString st du type 01=boeuf on enlève 01=<br />
    	    NSRange rang = [compareString rangeOfString:@&quot;=&quot;];<br />
    	    int l = rang.location + 1;<br />
    	    NSString *monSub = [compareString substringFromIndex:l];<br />
    	    //Comparaison avec entre les deux strings<br />
    	    NSRange substringRange = [monSub rangeOfString:substring options:NSCaseInsensitiveSearch];<br />
    		    if (substringRange.location == 0) {<br />
    			    [autoCompletionArray addObject:compareString];<br />
    		    }<br />
    }<br />
       <br />
    tableauResultat.hidden = NO;<br />
    [tableauResultat reloadData];<br />
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;<br />
    }<br />
    
  • AliGatorAliGator Membre, Modérateur
    OMG Nan mais pourquoi tu ne veux vraiment pas utiliser les méthodes toutes faites ?

    Que ce soit NSPredicate ou filterArrayUsingBlock (moins performant, mais si vraiment tu es fermé à  NSPredicate, bien que je ne comprenne pas pourquoi, suffit de lire la doc et le Programming Guide pour comprendre ça se fait en 2 lignes de code...) plutôt que de boucler manuellement...
  • Je sais je sais, désolé !!! ^^

    Disons que comme ça c'était fait rapidement et que j'avais vraiment pas beaucoup de temps pour faire des recherches sur NSPredicate ou filterArrayUsingBlock mais je te promets Ali que je reviendrais sur ce petit bout de code pour qu'il soit plus joli dès que j'aurais du temps !
Connectez-vous ou Inscrivez-vous pour répondre.