我有一个帮助类,我想显示一个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。为什么会这样?
答案 0 :(得分:2)
-UPDATE -
FBLinker
实例不是其调用者的强属性,因此委托回调转到了悬空指针。 OP报告使FBLinker
strong
处理问题。
使课程从UIView
而不是NSObject
延伸的原始建议没有任何效果,此处仅出于历史目的而引用。
答案 1 :(得分:0)
我在我正在工作的应用中遇到了同样的情况。如果委托对象不是强(或在5.0之前的iOS中保留)属性,则可能在显示UIAlertView之后立即取消分配。