43

我试图弄清楚为什么我的应用程序会崩溃。

它在带有 ios5.1 的模拟器中运行的 Xcode 4.4 中运行良好,但是当我切换到 xcode 4.5 和 ios6 时,我得到一个 EXC_BAD_ACCESS 代码 2。这是我的代码:

- (void) myMethod
{
    UIAlertView *alertview = [[[UIAlertView alloc]initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease];
    alertview.tag = 1
    [alertview show];
}

这给了我一个 EXC_BAD_ACCESS 代码 2 就[UIAlertView show]行了

有任何想法吗?

谢谢!

4

2 回答 2

127

我懂了。我有同样的问题,在我的情况下,似乎该方法现在是从后台抛出的(现在在 ios7 中,在 ios6 中 UIAlertView 自动放入主线程,正如@nodepond 所说-谢谢!-)..

尝试确保从主线程显示该方法:

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

祝你好运!

于 2012-09-18T11:12:09.823 回答
0

它发生在我身上,即使在 2014 年也是如此。问题是想要使用已经发布的对象。

我做错了什么:

//class B with UIAletViewDelegate

-(void) showAlert{
 UIAlertView * alert = [[UIAlertView alloc] initWithTitle bla bla...];
 [alert show];
}


//class A
viewDidLoad{
 MyClassB *B = [[B alloc] init];
 [B showAlert];
}

什么是正确的方法:

//Class A
@implementation A{
    ClassB *B;
}

 viewDidLoad{
     B = [[B alloc] init];
     [B showAlert];
 }
于 2014-10-21T02:23:52.430 回答