2012-01-15 30 views
0

當完成按鈕應用程序的點擊崩潰並給出程序收到信號SIGABRT的消息時。在解除來自UINavigation Controller的modalviewcontroller的問題完成按鈕

在ModalViewController.h委派協議和方法

@protocol ModalViewDelegate <NSObject> 

-(void) dismissModalView:(UIViewController *) viewController; 

@end 

@interface Infoviewcontroller : UIViewController <ModalViewDelegate> 

{ 
    id<ModalViewDelegate> dismissDelegate; 
} 

@property (nonatomic, retain) id<ModalViewDelegate> dismissDelegate; 

@end 

在modalviewcontroller。米文件

@synthesize dismissDelegate; 

-(void) dismissModalView:(UIViewController *) viewController; 
{ 

    [self dismissModalViewControllerAnimated:YES]; 

} 
@end 

在完成按鈕定義

UIButton* backButton = [UIButton buttonWithType:101]; 
[backButton addTarget:self action:@selector(dismissView:) forControlEvents:UIControlEventTouchUpInside]; 
[backButton setTitle:@"Done" forState:UIControlStateNormal]; 

// create button item 
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

// add the button to navigation bar 
self.navigationItem.leftBarButtonItem = backItem; 
[backItem release]; 


-(void) dismissView: (id)sender 

{ 
    [UIViewController dismissDelegate]; 
} 

當完成按鈕的應用程序崩潰的點擊次數和給出節目接收信號SIGABRT消息。所以我認爲我做錯了dismissView完成按鈕的方法,這就是爲什麼它給出的消息,UIViewController dismissDelegate無法識別的選擇器

幫助將不勝感激。

感謝

回答

3

你調用的UIViewController一個類的方法不存在(dismissDelegate - 您已定義爲Infoviewcontroller的屬性)。

我覺得你與使用ModalViewDelegate的有些困惑,讓我試着解釋...

在蘋果視圖控制器編程指南,該建議是:將呈現模態控制器的視圖控制器是負責解僱它。因此,您需要一種模式控制器與演示控制器通話的方式。

所以...您的展示控制器應符合您的ModalViewDelegate協議(不是您的模態控制器,因爲您在這裏)。

當您呈現模態視圖控制器時,您將其委託設置爲self(自身是呈現視圖控制器)。然後

你dismissView方法應該是:

-(void) dismissView: (id)sender 
{ 
    [self.dismissDelegate dismissModalView:self]; 
} 

其實,你可能甚至不需要到UIViewController的參數傳遞給委託,你會不會落得使用它。

最後,你的dismissDelegate屬性真的不應該保留,它應該被賦值,否則你最終會得到一個循環保留關係。

+0

非常感謝您花時間詳細解釋。 – user1120133 2012-01-15 20:54:35

+0

作爲進一步的評論,請注意iOS5.0之前的模態視圖控制器沒有'presentationViewController',並且不會對這個選擇器做出響應。在iOS5.0中,Apple也將'parentViewController'的返回值(!)更改爲'nil'。 – SK9 2012-01-16 22:10:02

0

試試這個:

-(void) dismissView: (id)sender 

{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

現在警告消失,但完成按鈕仍然沒有關閉模態視圖 – user1120133 2012-01-15 20:33:31

+0

我認爲按鈕應該調用協議方法來解除模態視圖 – user1120133 2012-01-15 20:38:12

相關問題