2013-05-08 4 views
0

내 while 루프가 작동하지 않는 것 같습니다. 이보기를로드하면 앱이 정지됩니다. while 루프를 포함하는 코드 부분을 삭제하면 앱이 멈추지 않습니다.while 루프가 작동하지 않는 동안

내가 찾고있는 것은 동일한 배열이 두 번 선택되지 않도록하는 코드 조각입니다.

@interface ThirdViewController() 

@end 

@implementation ThirdViewController 

... 
NSString * Answer = @""; 
NSArray * RAMArray; 

... 

- (void)NewQuestion 
{ 
    NSString * PlistString = [[NSBundle mainBundle] pathForResource:@"Questions" ofType:@"plist"]; 
    NSMutableArray * PlistArray = [[NSMutableArray alloc]initWithContentsOfFile:PlistString]; 
    NSArray *PlistRandom = [PlistArray objectAtIndex: random()%[PlistArray count]]; 

    while (![PlistRandom isEqual: RAMArray]) 
    { 
     NSArray *PlistRandom = [PlistArray objectAtIndex: random()%[PlistArray count]]; 
    } 

    RAMArray = PlistRandom; 
    ... 
} 

- (void)Check:(NSString*)Choise 
{ 
    ... 

    if ([Choise isEqualToString: Answer]) 
    { 
     ... 
     [self NewQuestion]; 
    } 
} 

- (IBAction)AnsButA:(id)sender 
{ 
    UIButton *ResultButton = (UIButton *)sender; 
    NSString *Click = ResultButton.currentTitle; 

    [self Check:Click]; 
} 
+0

는 루프 –

+0

무한 그리고 내가 그것을 어떻게 해결합니까 의미 : 내가 생각하는 당신의 문제는 범위 지정 문제가 바로 여기에 루프를 변경하고 그 작동하는지 확인입니까? – Berendschot

+0

무한하게 만드는 것을 찾아서 –

답변

3

내 생각 엔 당신이 때문에 while 루프 내에서 PlistRandom을 다시 선언하는 것입니다, 내부 선언 한 변수는 while conditionis 평가 시점에서 범위를 벗어날 수있다.

while (![PlistRandom isEqual: RAMArray]) 
{ 
    PlistRandom = [PlistArray objectAtIndex: random()%[PlistArray count]]; 
} 
+0

좋은 장소. RAMArray가 아무 곳이나 초기화되지 않는 것처럼 보이는 문제도 있습니다. 만약'nil'이라면 isEqual :''PListRandom'으로 보내면 절대 사실이 아닙니다. – JeremyP

+0

@JeremyP 또한 유효한 포인트, OP는/RAMArray'가 초기화되는 곳을 지정해야합니다 –

+0

내 의견에 답해 주셔서 감사합니다. ;) – rmaddy

관련 문제