虽然(不)循环冻结应用程序

虽然(不)循环冻结应用程序

问题描述:

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

我的猜测是因为你的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