2012-09-13 87 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

正常工作... *仅当当前活动不在主线程中时:-) –