我从plist中选择一个数组的索引。这是一本包含10个不同字符串的字典。
NSArray* tableau = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"codes" ofType:@"plist"]];
NSDictionary* phrase = [tableau objectAtIndex:nombreChoisi];
我想把6个元素随机分成6个标签
我尝试将它传递给新的NSMutableArray,但它不起作用:
NSArray* tableau = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"codes" ofType:@"plist"]];
NSDictionary* phrase = [tableau objectAtIndex:nombreChoisi];
NSString *phraseMelange1 = [phrase objectForKey:@"texte1"] ;
NSString *phraseMelange2 = [phrase objectForKey:@"texte2"] ;
NSString *phraseMelange3 = [phrase objectForKey:@"texte3"] ;
NSString *phraseMelange4 = [phrase objectForKey:@"texte4"] ;
NSString *phraseMelange5 = [phrase objectForKey:@"texte5"] ;
NSString *phraseMelange6 = [phrase objectForKey:@"texte6"] ;
NSMutableArray *tableauMelange = [[NSMutableArray alloc] initWithObjects:
phraseMelange1,
phraseMelange2,
phraseMelange3,
phraseMelange4,
phraseMelange5,
phraseMelange6,
nil];
for(int i=0;i<6;i++)
{
int idx;
idx = random()%[tableauMelange count];
NSString* titre = [tableauMelange objectAtIndex:idx];
texte1.text = titre;
[tableauMelange removeObjectAtIndex:idx];
}
{
int idx;
idx = random()%[tableauMelange count];
NSString* titre = [tableauMelange objectAtIndex:idx];
texte2.text = titre;
[tableauMelange removeObjectAtIndex:idx];
}
{
int idx;
idx = random()%[tableauMelange count];
NSString* titre = [tableauMelange objectAtIndex:idx];
texte3.text = titre;
[tableauMelange removeObjectAtIndex:idx];
}
{
int idx;
idx = random()%[tableauMelange count];
NSString* titre = [tableauMelange objectAtIndex:idx];
texte4.text = titre;
[tableauMelange removeObjectAtIndex:idx];
}
{
int idx;
idx = random()%[tableauMelange count];
NSString* titre = [tableauMelange objectAtIndex:idx];
texte5.text = titre;
[tableauMelange removeObjectAtIndex:idx];
}
{
int idx;
idx = random()%[tableauMelange count];
NSString* titre = [tableauMelange objectAtIndex:idx];
texte6.text = titre;
[tableauMelange removeObjectAtIndex:idx];
}
[tableauMelange release];
我也尝试这个:
NSMutableArray *array;
array=[[phrase allKeys] mutableCopy];
但它给了我关键而不是没有选择我需要的价值的价值。
感谢您的帮助。
答案 0 :(得分:2)
你的一般方法在这里很好,但你的循环逻辑似乎有缺陷。我打算清理一些东西,看看这对你有帮助。
首先,让我们将你的标签放入他们自己的数组中,以便更容易处理。这将让我们通过索引而不是变量名来访问每个标签,因为我们稍后会创建循环。
NSArray *myLabels = [NSArray arrayWithObjects:texte1, texte2, texte3, texte4, texte5, texte6, nil];
现在让我们用你的短语创建一个可变数组 - 这可以使用循环来完成,因为你知道你要找的键有连续数字:
// This is your existing code that reads the phrases from a plist:
NSArray* tableau = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"codes" ofType:@"plist"]];
NSDictionary* phrase = [tableau objectAtIndex:nombreChoisi];
// Now read the phrases into a mutable dictionary:
NSMutableArray *myPhrases = [NSMutableArray arrayWithCapacity:6];
for (int i = 1; i <= 6; i++) {
NSString *myPhrase = [phrase objectForKey:[NSString stringWithFormat:@"texte%d", i]];
[myPhrases addObject:myPhrase];
}
现在我们需要创建一个循环来随机从可变字典中拉出短语并将它们分配给随机标签。我们将经历这个循环六次,每次选择一个随机短语并将其分配给标签。在分配短语后,我们将其从字典中删除,以便不再使用它。
for (int i = 0; i < 6; i++) {
// Choose a random phrase
int randIdx = random() % [myPhrases count];
NSString *randPhrase = [myPhrases objectAtIndex:randIdx];
// Assign the next label's text
[myLabels objectAtIndex:i].text = randPhrase;
// Remove the phrase from the mutable dictionary so it isn't used again:
[myPhrases removeObjectAtIndex:randIdx];
}