0

plist에서 배열 색인을 선택합니다. 문자열이있는 10 개의 다른 줄이있는 사전입니다.NSArray의 일부 객체를 가져 와서 레이블에 임의로 넣습니다.

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

어떤 문제가 해결되지 않습니까? 당신이보고있는 오류/나쁜 행동에 대해 더 구체적으로 설명해 줄 수 있습니까? – fbrereto

답변

2

일반적인 접근 방식이 좋지만 루핑 논리에 결함이있는 것 같습니다. 나는 몇 가지 것들을 청소하고 그것이 당신을 돕는 지 볼 것입니다.

우선이 라벨을 다루기 쉽도록 자신의 배열에 넣으십시오. 이렇게하면 나중에 루프를 만들 때 변수 이름이 아닌 색인으로 각 레이블에 액세스 할 수 있습니다.

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

지금 우리가 만들어야합니다 - 이제

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

의이 문구로 변경 가능한 배열을 만들 수 있습니다 당신은 당신이 찾고있는 키를 알고 있기 때문에이 루프를 사용하여 수행 할 수 있습니다 순차적 자리 숫자 변이 가능한 사전에서 문구를 무작위로 추출하여 임의의 레이블에 지정하는 루프. 우리는이 루프를 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]; 
} 
+0

도움이되었지만 다음과 같은 경우 "구조체 결합이 아닌 멤버 요청"오류가 발생했습니다. [myLabels objectAtIndex : i] .text = randPhrase; 이상한 점 때문에, texte1.text = randPhrase; OK입니다. – Rufilix