2012-06-18 116 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之後立即解除分配。