iOS SDK 6.0中UIAlertView导致崩溃问题

18

我最近向App Store提交了一款应用,但还未被接受。同时,我下载了Xcode 4.5并在 iPhone 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
在一个线程上显示...这就是原因吗?为什么在5.1中没有发生? - kubilay
如果您从主线程以外的线程调用此代码,那么它很可能会崩溃。否则,代码是正常的。 - JustSid
2个回答

27

删除此方法并使用其他方法:

 [myAlertView show];  

尝试这种方法:

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

这个代码是可以运行的,但我遇到的问题是当用户点击“确定”后,警告框消失了 - 这很好,但仍然有一个淡出的背景仍然存在,但当用户在显示警告框的主视图中的任何位置单击时就会消失..... 有什么想法吗?比如在用户在警告框中点击“确定”后添加[alert hide]? - jsetting32
运行良好...*仅当当前活动不在主线程中 :-) - DD_

20

参见相关问题:从后台线程显示UIAlertView且没有委托会导致EXC_BAD_ACCESS错误

用户输入和UI调用必须来自主线程。它们大多数时候可以在其他线程上工作,但有时会崩溃。它们更有可能在设备上以不同方式崩溃(更或更少频繁),但iOS6可能会影响这种差异。

至于您的第二个问题,我会回答是的,只要您解决了问题,就应该立即上传更新的二进制文件进行审核,尤其是如果您能在设备上重现此问题(我强烈建议您在设备上尝试重现此问题)。否则,您可能会A)被接受,但用户讨厌的一个漏洞 B)被拒绝,等待时间更长,可能会面临更多审查。如果您在审核完成之前发送更新的二进制文件,据我所知,它会将您放在“排队”的末尾,但比其他选择更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接