2012-09-13 121 views
18

我最近向App Store提交了一個尚未被接受的應用程序。同時,我下載了Xcode 4.5並在iPhone 6.0 Simulator中測試了我的應用程序。UIAlertView在iOS SDK 6.0中導致崩潰

但是,當我打算顯示UIAlertView時,該應用程序在[myAlertView show]行上崩潰,出現EXC_BAD_ACCESS錯誤。它適用於iPhone 5.1模擬器。

這裏是我的代碼:

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Warning" message:@"Are you sure?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
[myAlertView show]; 

是正常嗎?我在做什麼錯我的代碼?

另外,你認爲我應該重發我的應用程序的蘋果?(只是問你的意見)提前

感謝。

編輯:蘋果因爲iOS 6崩潰而拒絕了該應用。

+1

您是否嘗試過一個項目清爽乾淨的構建?你是否正在顯示來自主線程而不是主線程的警告視圖,其中所有UI代碼必須駐留或者可能意外崩潰? – Levi

+0

在線上顯示...這是爲什麼?爲什麼5.1不會發生? – kubilay

+0

@confeng如果你從主線程以外的線程調用這個代碼,是的,這很可能是爲什麼它崩潰。否則代碼很好。 – JustSid

回答

20

請參閱此相關的問題: UIAlertView shown from background thread and with no delegate creates EXC_BAD_ACCESS

用戶輸入UI調用必須來自主線程。他們中的許多人會在其他線程中「最」的時間工作,但有時會崩潰。他們更可能在模擬器上以不同方式(或多或少)以不同方式崩潰,但蘋果可能會做出影響iOS6差異的更改。

對於第二個問題,我會回答是,我會在解決問題時立即上傳更新後的二進制文件,尤其是如果您可以在設備上重現此問題(我強烈建議您嘗試重現該問題在設備上)。否則,你可能A)被用戶厭惡的錯誤所接受,或者B)被拒絕,並且有更長的延遲和更可能的審查。如果您在審查完成前發送更新後的二進制文件,它會將您置於「AFAIK」的後面,但比替代方案更好。

27

刪除此方法,並使用另一種方法:

[myAlertView show]; 

試試這個方法:

[myAlertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES]; 
+0

它適用於我,感謝那 –

+0

這工作,但我遇到的問題是,當用戶點擊好,警報消失 - 好,但他們仍然是褪色的背景,仍然出現,但消失時,用戶點擊顯示alertview的主視圖中的某處.....任何想法?在用戶點擊警報視圖中的好處後,就像[警報隱藏]一樣? – jsetting32

+0

正常工作... *僅噹噹前活動不在主線程中時:-) –