2014-07-24 108 views
-2

使用協議和委託不是我經常使用的東西(我之前使用過),但是這一次,我做了所有事情,因爲它應該完成,但協議的方法沒有被調用。爲什麼不調用這個委託方法?

所以我有2個類:ToolBarViewController和核心,並在ToolBarView我有1個按鈕。當我按下按鈕時,它應該調用從ToolBarViewControllerDelegate按下的方法toolBarButton。 一些代碼:

1)協議和委託聲明在ToolBarViewController.h

@protocol ToolBarViewControllerDelegate <NSObject> 
@optional 
-(void)toolBarButtonPressed:(NSString*)buttonName; 

@end 

。 。

@property (nonatomic, weak) id<ToolBarViewControllerDelegate> delegate; 

2)在ToolBarViewController.m方法呼叫

- (IBAction)button1:(NSButton *)sender { 
    NSLog(@"b1"); 
    if([ self.delegate respondsToSelector:@selector(toolBarButtonPressed:)]){ 
     [self.delegate toolBarButtonPressed:@"button1"]; 
    }else{ 
     NSLog(@"don't responde"); 
    } 
} 

3)在Core.h

@interface Core : NSObject<ToolBarViewControllerDelegate> 

4使用ToolVarViewControllerDelegate核心)實例化對象ToolBarViewController和在設置代表Core.m

-(id)init{ 
self = [super init]; 
if (self){ 
    toolBarViewController = [[ToolBarViewController alloc]init]; 
    [toolBarViewController setDelegate:self]; 
    self.mainViewController = [[MainViewController alloc]init]; 
    NSLog(@"Core Inited.........DONE"); 
} 
return self; 

} 5)的方法,toolBarButtonPressed:在Core.m

-(void)toolBarButtonPressed:(NSString*)buttonName{ 
    NSLog(@"Button pressed %@",buttonName); 
} 

6)ToolBarViewController聲明在core.h:

@property (strong) ToolBarViewController* toolBarViewController; 

7)子視圖連接: enter image description here 的有趣之處在於當按鈕被按下時,如果返回false。 有沒有人可以解釋爲什麼會發生這種情況? 謝謝

+0

你能檢查'self.delegate'是否在按鈕點擊處理程序中爲零嗎? – Macondo2Seattle

+0

是的,它是零。但我不明白爲什麼 – user1792771

+0

我檢查,如果對象toolBarViewController是零後,我在core.m中設置委託,它不爲空。那麼爲什麼ToolBarViewController中的委託是零? – user1792771

回答

0

此行創建一個全新的視圖控制器。它確實而不是獲得已經在您的視圖層次結構中的那個。

toolBarViewController = [[ToolBarViewController alloc] init]; 

如果ToolBarViewController已經在你的視圖層次結構中,你應該這樣做。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.toolBarViewController setDelegate:self]; 
} 

如果它不您的視圖層次的是,它應該是這個樣子。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.toolBarViewController = [[ToolBarViewController alloc] init]; 
    [self.toolBarViewController setDelegate:self]; 
    [self.view addSubview:self.toolBarViewController.view]; 
} 
+0

問題是,toolBarViewController在Core.h中聲明爲強屬性,並且在您突出顯示的行中第一次初始化。如果我刪除該行,那麼toolBarViewObject將不會被初始化 – user1792771

+1

ToolBarViewController如何進入視圖層次結構?它在哪裏呈現? – CrimsonChris

+0

程序結構是:appdelegate聲明並創建核心對象,核心類聲明並創建toolbarviewcontroller和mainviewcontroller。 toolbarviewcontroller和mainviewcontroller在應用程序的主窗口中控制2個子視圖 – user1792771

相關問題