将NSString与循环中的图像文件名匹配

时间:2010-07-21 21:22:06

标签: cocoa nsstring nsarray

我有以下方法:

-(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并添加文件名(@“United States”,@“canada”,@“germany”,@“denmark”等)。

我希望有人可以告诉我一个更好的方法,所以我不必创建数组来循环,但如果我可以直接查看文件名?这样我就不必在数组中添加200多个NSString对象,可能会忽略一大堆。

由于

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试为某个国家/地区返回图片,但前提是该图片位于您的批准列表中,并且originString可能包含您不关心的其他文字。

相反,如果可能的话,我要求originString仅包含您关注的文字,然后将这些图片移到资源的子目录中,并直接调用imageNamed:。如果图像无法加载,它将返回nil并且行为与您的方法相同。你可以摆脱那个数组,避免循环和大量的字符串比较。

如果您无法为originString添加该要求,那么我建议您首先考虑修改这个设计问题。


根据Canada Dev的回复进行编辑:

查看-[NSFileManager contentsOfDirectoryAtPath:error:]的文档。您可以枚举目录中的文件,将它们(减去.png扩展名)存储在数组中,然后使用该数组扫描匹配项。

您应该按长度对数组进行排序,最长一次,以避免误报。我想不出一个国家的例子,但对于你想在“弗吉尼亚”之前检查“西弗吉尼亚”的州,因为后者将匹配与前者匹配的字符串。