0

Je choisis l'indice d'un tableau à partir d'un plist. C'est un dictionnaire avec 10 lignes différentes avec de la ficelle.Prendre un objet dans NSArray et le mettre au hasard dans les étiquettes

NSArray* tableau = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"codes" ofType:@"plist"]]; 

NSDictionary* phrase = [tableau objectAtIndex:nombreChoisi]; 

Je voudrais prendre 6 éléments et cela pour transmettre les mettre en 6 étiquettes au hasard

J'ai essayé dans une nouvelle NSMutableArray, mais il ne fonctionne pas:

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

J'essaie aussi cela avec:

NSMutableArray *array; 
array=[[phrase allKeys] mutableCopy]; 

mais il donne moi les clés et non la valeur sans possibilité de choisir celles dont j'ai besoin.

Merci pour votre aide.

+0

Qu'est-ce qui ne fonctionne pas à ce sujet? Pouvez-vous être plus précis sur les erreurs/les mauvais comportements que vous voyez? – fbrereto

Répondre

2

Votre approche générale est bonne ici, mais votre logique de bouclage semble défectueuse. Je vais nettoyer quelques choses et voir si cela vous aide.

Tout d'abord, mettons vos étiquettes dans leur propre tableau, pour que cela soit plus facile à gérer. Cela nous permettra d'accéder à chaque étiquette par un index plutôt que par son nom de variable lorsque nous créerons notre boucle plus tard.

NSArray *myLabels = [NSArray arrayWithObjects:texte1, texte2, texte3, texte4, texte5, texte6, nil]; 

Maintenant, nous allons créer un tableau mutable avec vos phrases - cela peut être fait en utilisant une boucle parce que vous connaissez les clés que vous cherchez avoir des chiffres séquentiels:

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

Maintenant, nous devons créer une boucle pour extraire au hasard des phrases du dictionnaire mutable et les assigner à une étiquette aléatoire. Nous allons parcourir cette boucle six fois, en choisissant chaque fois une phrase aléatoire et en l'attribuant à une étiquette. Après avoir assigné la phrase, nous la supprimerons du dictionnaire pour qu'elle ne soit plus utilisée.

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

Cela m'aide, mais j'ai une erreur "demande pour un membre pas une union de structure" à: [myLabels objectAtIndex: i] .text = randPhrase; Etrange car, texte1.text = randPhrase; est OK. – Rufilix

Questions connexes