2010-07-21 6 views
0

je la méthode suivante:match NSString avec des noms de fichiers image en boucle

-(UIImage *)flagFromOrigin:(NSString *)originString { 
     NSRange range; 
     for (NSString *arrayString in countryArray) { 
      range = [[originString lowercaseString] rangeOfString:arrayString]; 
      if (range.location != NSNotFound) { 
       return [UIImage imageNamed:[NSString stringWithFormat:@"%@.png", arrayString]]; 
      } 
     } 
     return nil; 
    } 

Plus tôt dans la classe I init NSArray * countyArray et ajouter des noms de fichiers (@ "Etats-Unis", @ "canada", @ "Allemagne", @ "Danemark", etc.). J'espérais que quelqu'un pourrait me dire une meilleure façon de ne pas avoir à créer le tableau pour faire une boucle, mais si je pouvais regarder directement les noms de fichiers? De cette façon, je n'ai pas besoin d'ajouter plus de 200 objets NSString au tableau et je peux éventuellement négliger tout un tas.

Merci

Répondre

0

Il vous semble que vous essayez de retourner une image pour un pays, mais seulement si elle est dans votre liste approuvée, avec la possibilité de originString contenant un autre texte que vous ne se soucient pas. Au lieu de cela, si possible, originString ne contient que le texte qui vous intéresse, puis déplacez ces images dans un sous-répertoire de vos ressources et appelez directement imageNamed:. Il renverra nil si l'image n'a pas pu être chargée et se comportera comme votre méthode. Vous pouvez vous débarrasser de ce tableau et éviter la boucle et beaucoup de comparaisons de chaînes.

Si vous ne pouvez pas ajouter cette exigence pour originString, alors je suggère que c'est un problème de conception que vous devriez considérer en premier lieu.


Modifier basé sur la réponse du Canada Dev:

Regardez la documentation -[NSFileManager contentsOfDirectoryAtPath:error:]. Vous pouvez énumérer les fichiers dans un répertoire, en les stockant (moins l'extension .png) dans un tableau, puis utiliser ce tableau pour rechercher les correspondances.

Vous devez trier le tableau par longueur, en commençant par le plus long afin d'éviter les faux positifs. Je ne peux pas penser à un exemple pour les pays, mais pour les états, vous voudrez vérifier "West Virginia" avant "Virginia", parce que ce dernier va correspondre à des chaînes qui correspondent également à la première.

+0

Cela me demanderait quand même de faire en sorte que 'originString' contienne un pays approprié. J'ai déjà plus de 200 fichiers image, je veux juste chercher un fichier image qui correspondrait à la chaîne originString, qui peut contenir plus que la chaîne de pays brute, d'où la boucle. – runmad

Questions connexes