0

我从 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];

但它给了我钥匙而不是价值,没有可能选择我需要的东西。

谢谢你的帮助。

4

1 回答 1

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];
}
于 2009-10-12T22:23:24.013 回答