从Plist文件“加载”文本并使用它(Xcode)

时间:2012-12-02 20:21:41

标签: iphone objective-c ios xcode macos

我有4个UI按钮和一个UILabel。我想在4个按钮上随机显示4个单词(来自plist文件)(一个按钮有一个单词)和标签上显示的一个单词(具有相同的单词名称)按钮)。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

假设您的plist被称为words.plist并且您的数组为4 UIButtons

NSString * path = [[NSBundle mainBundle] pathForResource:@"words" ofType:@"plist"];
NSMutableArray * words = [NSMutableArray arrayWithContentsOfFile:path];

现在,您在words数组中拥有所有可能的单词。此时我们需要4个独特的随机索引,这基本上意味着在随机改组之后取出数组的起始4个元素。我们将使用Fisher-Yates shuffle algorithm回答中建议的this

for (int i = words.count - 1; i > 0; --i) {
    int r = arc4random_uniform(i);
    [words exchangeObjectAtIndex:i withObjectAtIndex:r];
}

现在我们有一个随机改组的单词,我们只需要前4个元素并将它们分配给按钮。它看起来像是:

for (int j = 0; j < buttons.count; j++) {
    UIButton * button = [buttons objectAtIndex:j];
    button.titleLabel.text = [words objectAtIndex:j];
}

最后,我们为标签指定一个单词,随机选择我们用于按钮的索引之间的索引:

yourLabel.text = [words objectAtIndex:arc4random_uniform(buttons.count)];

这个解决方案适用于任意数量的按钮,由于混洗算法(肯定比检查已经生成的索引更好),它保证是高效的,并且由于{{1}的使用,随机生成没有偏差}}

答案 1 :(得分:2)

将PLIST文件的内容移动到数组中。

NSArray *words = [[NSArray alloc] initWithContentsOfFile:filePath];

随机找到一个数字。

int randInt = arc4random() % 10;

10更改为PLIST中的总字数。

您现在可以从数组中选择随机字。

NSString *random = [words objectAtIndex:randInt];

你有一个随机词。找到另一个随机数(检查以确保它与前一个不同),然后从words数组中选择下一个单词。