Сопоставить NSString с именами файлов изображений в цикле - PullRequest
0 голосов
/ 22 июля 2010

У меня есть следующий метод:

-(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", @"Дания" и т. д.).

Я надеялся, что кто-нибудь может сказать мне лучший способ, чтобы мне не нужно было создавать массив для циклического прохождения, но если бы я мог вместо этого непосредственно посмотреть на имена файлов?Таким образом, мне не нужно добавлять 200+ NSString объектов в массив и возможно пропустить целую кучу.

Спасибо

1 Ответ

0 голосов
/ 22 июля 2010

Похоже, вы пытаетесь вернуть изображение для страны, но только если оно есть в вашем утвержденном списке, с возможностью originString, содержащего другой текст, который вас не волнует.

Вместо этого, если возможно, я бы поставил требование, чтобы originString содержал только текст, который вас интересует, затем переместил эти изображения в подкаталог ваших ресурсов и вызвал imageNamed: напрямую.Он вернет nil, если изображение не может быть загружено, и будет вести себя так же, как ваш метод.Вы можете избавиться от этого массива и избежать цикла и множества сравнений строк.

Если вы не можете добавить это требование для originString, тогда я предлагаю решить эту проблему проектирования, и вам следует сначала исправить ее.


Редактировать на основе ответа разработчика Канады:

Посмотрите документацию по -[NSFileManager contentsOfDirectoryAtPath:error:].Вы можете перечислить файлы в каталоге, сохранив их (за исключением расширения .png) в массиве, а затем использовать этот массив для поиска совпадений.

Вы должны отсортировать массив по длине, сначала по длине, чтобыизбегать ложных срабатыванийЯ не могу привести пример для стран, но для штатов вы бы хотели проверить «Западную Вирджинию» перед «Вирджинией», потому что последняя будет соответствовать строкам, которые также соответствуют первой.

...