2012-06-30 59 views
0

我有一個錯誤,我不明白。爲什麼我的代表沒有收到這個選擇器?

我有一個類來幫着打印作業:

//.h 

@interface PrintDelegate : NSObject <UIPrintInteractionControllerDelegate, UIAlertViewDelegate> 

@property (weak, nonatomic) FFDetailViewController* controller; 
@property (strong, nonatomic) NSMutableData* pdf; 
@property (assign) int   pageCount; 
@property (strong, nonatomic) NSArray*   fields; 
@property (weak, nonatomic) UIPrintInteractionController* printController; 

- (id) initWithPageCount:(int)pc forFields:(NSArray*)flds Controller:(FFDetailViewController*)ctlr; 
- (int) printFromButton: (UIBarButtonItem*) btn; 
- (void) makePDF; 
- (void) shift:(PixelShiftDirection)dir pixelCount:(int)amt; 
- (void) adjustFields; 
- (void) onPrintComplete; 

@end 

打印完成時我顯示一個警告詢問用戶是否想(再次和打印)調整打印輸出。

//.m 
- (void) onPrintComplete 
{ 
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Printing Complete" message:@"Would you like to adjust the field positions?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Adjust", nil]; 

    [alert show]; 
} 

- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString* clickedButton = [alertView buttonTitleAtIndex:buttonIndex]; 

    if ([clickedButton isEqualToString:@"Adjust"]) 
    { 
     [self adjustFields]; 
    } 
} 

當我在警報可輕按按鈕,我得到類似的錯誤這樣:

-[__NSArrayM alertView:clickedButtonAtIndex:]: unrecognized selector sent to instance 

對象接收不好的選擇總是有一些奇怪的,(我也看到NSCFArrayM和__NSMallocBlock)。選擇器是來自UIAlertViewDelegate協議的一種方法。我不明白爲什麼選擇器被髮送到一些不正確的對象而不是我的PrintDelegae對象。

感謝

回答

0

您發佈的代碼看起來不錯,我(雖然UIAlertView中最終可能泄漏)。從你對錯誤的描述中,可能會有一些堆損壞,可能是由於多次釋放指向同一對象的指針所致。

0

簡短的回答是你很可能不會正確保留PrintDelegate。較長的版本是您應該檢查PrintDelegate實例的生命週期。它需要足夠長的時間處理clickedButton回調。您可以嘗試在PrintDelegate-dealloc方法中設置斷點,並查看它何時以及如何調用。

0

__NSArrayM是一個可變數組。無論是作爲委託傳遞錯誤的對象,還是在調用委託方法之前釋放,解除分配,重新分配和重新初始化。既然你也得到NSCFArrayM,另一個可變陣列和__NSMallocBlock,我推斷它是一個已分配但尚未初始化的內存塊,我建議第二塊。在創建警報視圖和解除警報視圖之間檢查您的內存管理。您可能想要嘗試XCode分析和分析工具,它們都非常出色。

相關問題