Ваш общий подход здесь хорош, но ваша логика зацикливания кажется ошибочной. Я собираюсь кое-что почистить и посмотреть, поможет ли это вам.
Прежде всего давайте разместим ваши метки в их собственном массиве, чтобы было легче с этим справляться. Это позволит нам обращаться к каждой метке по индексу, а не по имени переменной, так как мы создадим наш цикл позже.
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];
}