【问题标题】:Match NSString with image file names in loop将 NSString 与循环中的图像文件名匹配
【发布时间】:2010-07-21 21:22:05
【问题描述】:

我有以下方法:

-(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 对象,并且可能会忽略一大堆。

谢谢

【问题讨论】:

    标签: cocoa nsstring nsarray


    【解决方案1】:

    您似乎正在尝试返回一个国家/地区的图片,但前提是它在您的批准列表中,originString 可能包含您不关心的其他文本。

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

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


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

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

    您应该按长度对数组进行排序,最长的在前,以避免误报。我想不出国家的例子,但是对于你想在“Virginia”之前检查“West Virginia”的州,因为后者将匹配也匹配前者的字符串。

    【讨论】:

    • 这仍然需要我让originString 包含适当的国家/地区。我已经有 200 多个图像文件,我只想寻找一个与 originString 匹配的图像文件,它可能包含比原始国家字符串更多的内容,因此是循环。
    猜你喜欢
    • 2022-11-11
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多