2012-06-18 36 views
2

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

我声明它像这样:

@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

-UPDATE-

FBLinker实例是不是它的调用者的强大的属性,所以委托回调去了一个悬摆指针。 OP报告制作FBLinkerstrong照顾到问题。

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

+0

试过了,没有运气。点击任一按钮时同样崩溃。我注意到如果我没有设置委托,它不会*崩溃,但显然这会在这里失败。 – Keller

+0

有趣的是有没有崩溃时产生任何类型的堆栈跟踪? – diatrevolo

+0

没有用。在main.m中崩溃,EXC_BAD_ACCESS – Keller

0

我在我工作的应用程序中遇到了同样的情况。如果委托对象不是很强大(或保留在5.0之前的iOS中)属性,它可能会在显示UIAlertView之后立即解除分配。