我正在与国家/地区制作应用,这是一个标志。现在我有一个问题。我有从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"
...