2

我有一个助手类,我想显示一个 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。为什么会这样?

4

2 回答 2

2

-更新-

FBLinker实例不是其调用者的强属性,因此委托回调转到一个悬空指针。OP 报告制作FBLinker strong解决了问题。

使类扩展UIView而不是NSObject无效的原始建议,此处仅出于历史目的引用。

于 2012-06-18T16:38:15.090 回答
0

我正在使用的应用程序中遇到了同样的情况。如果委托对象不是强(或在 5.0 之前的 iOS 中保留)属性,它可能会在 UIAlertView 显示后立即被释放。

于 2012-06-25T16:43:36.867 回答