我正在与国家/地区制作应用,这是一个标志。现在我有一个问题。我有从1到200的标志。还有所有数字的名称。 (例如,1是澳大利亚,2是美国)。我使用random在UIImageView中显示标志。之后,我有4个按钮,这些按钮从标志名称变为其名称。
所有代码都在最后。

我有一个数组,在其中存储图像名称。


我有一个数组,在其中存储图像名称。
还有一个带有按钮名称的文件。


问题:如何用姓名代替国家/地区号码?
如何从文件中放入NSDictionary所有名称?或该怎么做才能拥有这种功能?

对不起我的英语不好。 :)
功能代码,即nextFlag。

- (void)nextFlag
{
    int tmp = random() % [avalibleFlags count];
    NSString *imgString = [avalibleFlags objectAtIndex:tmp];
    NSString *path = [[NSBundle mainBundle] pathForResource:imgString ofType:@"png"];
    UIImage *newImage = [UIImage imageWithContentsOfFile:path];
    currentFlagName = imgString;
    [_currentFlag setImage:newImage];
    [avalibleFlags removeObjectAtIndex:tmp];
    NSMutableArray *tmpFlags = [allFlags mutableCopy];
    [tmpFlags removeObjectAtIndex:tmp];
    for (int i=0; i<3; i++)
    {
        int tmpNumber = random() % [tmpFlags count];
        NSString *stringForButton = [tmpFlags objectAtIndex:tmpNumber];
        [tmpFlags removeObjectAtIndex:tmpNumber];
        [buttonNames insertObject:stringForButton atIndex:i];
    }
    int tmp2 = random() % 4;
    [[_buttons objectAtIndex:tmp2] setTitle:imgString forState:UIControlStateNormal];
    for (int i = 0, j = 0; i<4; i++) {
        if ([[_buttons objectAtIndex:i] currentTitle] != currentFlagName)
        {
            [[_buttons objectAtIndex:i] setTitle:[buttonNames objectAtIndex:j] forState:UIControlStateNormal];;
            j++;
        }
    }
}

最佳答案

无需尝试将数字映射到国家名称,只需将图像名称映射到国家名称即可。这样,确切顺序并不重要。这将是最容易在文件中管理的,并且正如您提到的,名称确实应该本地化。因此,您想使用一个特殊的本地化字符串表,该表将文件名映射到国家名。一个方便的方法是NSLocalizedStringFromTable()。要在程序中检索特定标志的国家/地区名称,请使用:

NSString *countryName = NSLocalizedStringFromTable(imgString, @"FlagToCountry", @"");


然后,在您的Code项目中,将名为“ FlagToCountry.strings”的本地化文件添加到您的项目中。它应该以通常的.strings文件格式将所有标志映射到国家/地区,例如:

/* Australia */
"aus" = "Australia"

/* USA */
"usa" = "USA"
...

10-08 05:24
查看更多