带有ARC的UIActionSheet上的EXC_BAD_ACCESS

时间:2012-09-05 15:33:42

标签: iphone objective-c xcode automatic-ref-counting exc-bad-access

刚刚将一个项目转换为ARC,我现在在解雇UIActionsheet后得到了EXEC_BAD_ACCESS,它之前正在工作,我不确定这是否与ARC相关。僵尸已经启用,但没有向我显示任何内容,我尝试了一些实例,它也没有给我任何东西。

这是在模态视图控制器中显示的,案例0,退出按钮工作正常,但其他两个给我错误的访问错误。

这是我第一次转换到ARC,我在这里遗漏了什么吗?

行动表创建:

-(IBAction)quitPressed:(id)sender {
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Quit This Game?"    delegate:self cancelButtonTitle:@"Keep Playing" destructiveButtonTitle:@"Quit" otherButtonTitles:@"Quit and Reveal Answers",nil];
    [sheet showInView:self.view];

}

行动表委托:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{

    switch (buttonIndex) {
        case 0:  //quit
            [self dismissViewControllerAnimated:NO completion:^{
            [self.delegate quitGame];
        }];
        break;
        case 1:  //quit and reveal
            NSLog(@"reveal");
            break;
        case 2: //cancel
            NSLog(@"cancel"); 
            break;
        default:
        break;
    }

}

2 个答案:

答案 0 :(得分:0)

如果您在 .h 文件中宣布delegate strong。您是否已使用

.m 文件(最好是self.delegate)中初始化viewDidLoad至少一次

self.delegate = [[UIApplication sharedApplication] delegate];

答案 1 :(得分:0)

代表应为weakassign__weak / __unsafe_unretained代表ivars)以避免任何保留周期。

保留对您创建的工作表的引用。片材关闭后,您可以清除该参考。