在我使用cocos2d-iphone 2.0.0的iOS遊戲中,我彈出一個圖層,彈出一個要求用戶購買應用內購買的按鈕,供用戶點擊購買(menuItemBuyButton
)。當用戶點擊此購買按鈕,三件事情要做到:如何避免引用cocos2d-iphone(2.0.0)UI類的異步調用中的崩潰?
- 活動指示器啓動
- 層上的所有菜單項將被禁用 - 具體地說是主菜單(此代碼是在主菜單中的場景),購買按鈕本身和彈出菜單
- 購買調用和回調的通常順序被觸發。
當購買完成後,回調(這是另一個線程),則需要:
- 停止活動的指標
- 重新啓用已禁用菜單元素
- 更換場景另一個董事
現在,當我運行這個序列,並通過反覆點擊購買按鈕等等,只測試一次(和你再次重新報道)我在代碼崩潰 - 代碼和崩潰日誌如下。我懷疑(這可能是錯誤的),這是由於cocos2d的非線程安全性。我如何避免這次崩潰?我需要在開始購買交易之前禁用UI元素,並且在交易完成後必須重新啓用它們,這將在另一個線程中發生。
代碼是如下:
-(void) startActivityIndicator {
mainMenu.enabled = NO;
scorePopupMenu.enabled = NO;
menuItemBuyButton.isEnabled = NO;
[activityIndicatorView startAnimating];
}
-(void) stopActivityIndicator {
mainMenu.enabled = YES;
scorePopupMenu.enabled = YES;//this is line 744 that crashed
menuItemBuyButton.isEnabled = YES;
if (activityIndicatorView.isAnimating)
[activityIndicatorView stopAnimating];
}
崩潰日誌:
5 SmartRun 0x00126c4c -[MainMenuLayer stopActivityIndicator] (MainMenuLayer.m:744)
在哪個線程'stopActivityIndicator'叫什麼名字?背景還是主要? – Sebastian 2013-03-13 10:34:11