2013-05-08 50 views
0

我的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

這意味着循環是無限的 – 2013-05-08 15:43:30

+0

又如何解決呢? – Berendschot 2013-05-08 15:44:28

+0

通過找出是什麼使其無限 – 2013-05-08 15:46:43

回答

3

我的猜測是因爲你的while循環內重新申報PlistRandom,內聲明的變量可以是超出範圍的while conditionis評估點。您的問題,我認爲這是一個範圍的問題,只是改變環路這一點,看看是否能工程:

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

好地方。還有一個問題,RAMArray似乎沒有在任何地方初始化。如果它是'nil'' isEqual:'發送給'PListRandom'永遠不會是真的。 – JeremyP 2013-05-08 16:01:38

+0

@JeremyP另外一個有效的點,OP需要指定是否/在哪裏'RAMArray'初始化 – 2013-05-08 16:02:30

+0

感謝您對我的評論作出回答。 ;) – rmaddy 2013-05-08 16:05:43