ARC和UIAlertView:发送到实例的无法识别的选择器

时间:2011-12-15 02:51:40

标签: ios uialertview automatic-ref-counting

以下是我如何展示UIAlertView和委托clickedButtonAtIndex -

UIAlertView *alert =
    [[UIAlertView alloc] initWithTitle: @"title"
                               message: @"message"
                              delegate: self
                     cancelButtonTitle: @"Cancel"
                     otherButtonTitles: @"Continue", nil];

    [alert show];


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    //something
}

这段代码在没有ARC的情况下完美运行。但是使用ARC它会抛出这个错误 - 因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ NSCFType alertView:clickedButtonAtIndex:]:无法识别的选择器发送到实例0x859d790'

关于代表为何抛出此错误的任何想法?

2 个答案:

答案 0 :(得分:13)

你的代表已经被解除了。仔细检查您的代码,以确保显示警报并将自身设置为委托的对象以某种方式被保留(即:您的应用中的某些内容具有强烈的引用)。

答案 1 :(得分:0)

如果您在最后otherButtonTitles参数之后忘记了最后的nil,也会发生类似情况:

delegate: self cancelButtonTitle: @"No" otherButtonTitles: @"Yes",nil]; // don't forget the nil at the end here! (or it will crash first run)

有趣的是,它只在您第一次运行应用时崩溃。在那之后,它运行得很好。