【问题标题】:EXC_BAD_ACCESS code 2 on UIAlertView in iOS6iOS6 中 UIAlertView 上的 EXC_BAD_ACCESS 代码 2
【发布时间】:2012-09-10 05:24:21
【问题描述】:

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

它在带有 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];
}

这是在[UIAlertView show] 行上给我一个 EXC_BAD_ACCESS 代码 2

有什么想法吗?

谢谢!

【问题讨论】:

    标签: uialertview exc-bad-access ios6 xcode4.5


    【解决方案1】:

    这件事发生在我身上,即使是在 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];
     }
    

    【讨论】:

      【解决方案2】:

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

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

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

      祝你好运!

      【讨论】:

      • 我只是想补充一点,这个崩溃也发生在应用程序启动时,如果用户回家然后回来,警报视图显示将导致崩溃。执行 performSelectorOnMainThread... 将按照 Eva 的建议修复它。
      • 你从我的生活中拯救了几个小时......谢谢!
      • 谢谢!!让我免于很多挫折!!
      • 我认为iOS6.0改变了这一点。在此之前,UIAlertView 是自动放入主线程的。
      • 这也对我有用并解决了我的 EXC_BAD_ACCESS。谢谢一百万!
      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 2013-11-06
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多