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];
}

次に、可変辞書からフレーズをランダムに引き出し、ランダムなラベルに割り当てるループを作成する必要があります。このループを6回実行します。そのたびに、ランダムなフレーズを選択してラベルに割り当てます。フレーズを割り当てたら、辞書から削除して、二度と使用されないようにします。

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 に答える