2011-12-29 218 views
1

所以我在viewController的viewDidLoad方法中放了一个while循环,但是当我加载视图控制器时它不起作用并给了我一个SIGTERM。这是while循环的代码。While loop not working

- (void)viewDidLoad 
{ 
while (appDelegate.gobletCheckInt == 0 || appDelegate.gobletCheckInt == 1) { 
    if (CGRectIntersectsRect(mainSprite.frame, getGobletImg.frame)) { 
     haveGobletImg.image = [UIImage imageNamed:@"Gold Goblet.png"]; 
    } 
} 

appDelegate = [[UIApplication sharedApplication]delegate]; 
getGobletImg.image = [UIImage imageNamed:@"Gold Goblet.png"]; 

}

那些最后两行没有多大关系。所以我不应该把它放在viewDidLoad中?

回答

1

尝试使用它后,会填写appDelegate对象。看起来你需要将appDelegate的赋值移到while循环之上。

+0

这没有奏效。还有其他建议吗? – 2011-12-29 03:09:30

+0

你可以发布一部分堆栈跟踪吗?当应用程序终止时,调试器停止哪行?你的成员变量的值是什么?如果不移动app循环上方的AppDelegate赋值,我不明白上面的代码如何工作,但您可能需要的不仅仅是这些。没有看到更多的代码很难说。 – user1118321 2011-12-29 05:54:33

0

它可能会被运行时杀死一个无限循环?您将gobletCheckInt设置为0或1以外的其他位置?也许你应该:

NSLog(@"%d", appDelegate.gobletCheckInt); 

在你的while循环。

现在我必须做强制性的tsk-tsk,这是非常糟糕的体系结构。 :)你不应该从你的视图控制器检查应用程序委托的属性。应用程序委托严格用于接收来自UIApplication的消息,就像应用程序启动或终止时一样。它不应该用于在属性中保持状态。

+0

这就是我想要的是一个无限循环。 gobletCheckInt绝不等于1或0之外的任何东西。也许我不想要循环。我真正想要的是让循环中的代码继续执行。 – 2011-12-29 18:36:23

+0

然后,您应该在计时器上执行它。基本上进入一个无限循环会让你被运行时杀死,因为你的程序将变得没有响应。阅读关于NSTimer的文档。如果你想深入一些,你可以在程序的运行循环上安排一些东西,但这有点高级。 (我已经完成了像可达性测试这样的事情) – 2012-01-02 12:31:33