2010-07-21 57 views
0

圖像文件名我有以下方法:匹配的NSString與循環

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

在類早些時候,我初始化一個NSArray * countyArray並添加文件名(@「美國」,@「加拿大」, @「德國」,@「丹麥」等)。

我希望有人能告訴我一個更好的方法,所以我不必創建數組來循環,但如果我可以直接看文件名?這樣我就不必爲數組添加200多個NSString對象,並且可能會忽略一大堆。

感謝

回答

0

它看起來像你想對一個國家返回的圖像,但只有當它在你的核準清單,與originString包含您不關心其他文本的可能性。

相反,如果可能的話,我會要求originString只包含您關心的文本,然後將這些圖像移動到您的資源的子目錄中,並直接撥打imageNamed:。如果圖像無法加載,它將返回nil,並且其行爲與您的方法相同。你可以擺脫那個數組,避免循環和大量的字符串比較。

如果您不能添加originString的要求,那麼我建議您這是一個設計問題,您應該首先考慮解決問題。


編輯根據加拿大開發的答覆:

看看在-[NSFileManager contentsOfDirectoryAtPath:error:]的文檔。您可以枚舉目錄中的文件,將它們(減去.png擴展名)存儲在一個數組中,然後使用該數組掃描匹配項。

您應該按照長度排序數組,最長的一次,以避免誤報。我想不出一個國家的例子,但是對於那些你想在「弗吉尼亞州」之前檢查「西弗吉尼亞州」的州來說,因爲後者會匹配與前者匹配的字符串。

+0

這仍然需要我讓'originString'包含一個合適的國家。我已經有200多個圖像文件,我只想尋找一個匹配originString的圖像文件,它可能包含比原始國家字符串更多的圖像文件,因此也就是循環。 – runmad 2010-07-22 01:10:03