2011-12-29 141 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