NSObject扩展UIAlertViewDelegate崩溃?

时间:2012-06-18 16:34:06

标签: objective-c ios uialertview

我有一个帮助类,我想显示一个UIAlertView,然后执行一些Web服务操作。我想这样做,所以我可以在其他地方重新使用警报视图。

我这样声明:

@interface FBLinkHelper : NSObject <UIAlertViewDelegate>

我还有一个显示警报视图的方法:

- (void) showLinkDialog {
    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Link account with Facebook?" message:@"Linking your account with Facebook extends your user experience. Link account?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil];
    [av show];
}

这就是我展示对话框的方式:

    FBLinkHelper *fbLinkHelper = [[FBLinkHelper alloc] init];
    [fbLinkHelper showLinkDialog];

对我而言,一切似乎都很正常。它显示了警报视图对话框,但是当我单击一个按钮(任一个)时,我的应用程序在控制台中崩溃了。我注意到当我有一个UIAlertViewDelegate方法时,只会崩溃,比如didDismissWithButtonIndex。为什么会这样?

2 个答案:

答案 0 :(得分:2)

-UPDATE -

FBLinker实例不是其调用者的强属性,因此委托回调转到了悬空指针。 OP报告使FBLinker strong处理问题。

使课程从UIView而不是NSObject延伸的原始建议没有任何效果,此处仅出于历史目的而引用。

答案 1 :(得分:0)

我在我正在工作的应用中遇到了同样的情况。如果委托对象不是强(或在5.0之前的iOS中保留)属性,则可能在显示UIAlertView之后立即取消分配。