2013-04-25 23 views
1

語境@selector未燒製的UIBarButtonItem

  • 的應用程序使用一個UINavigationController範式
  • 我有一個子類 '的UIViewController' 稱爲類:QuestionViewController
  • 我再有一個子類的viewController QuestionViewController叫:QuestionMultipleChoiceViewController
  • 在QuestionViewController我有一個公共的方法,叫做:returnBarButtonItems返回一個NSArray
  • 在QuestionMultipleChoiceViewController我的self.toolbarItems屬性設置爲通過returnBarButtonItems返回
  • 的操作是在超類陣列 - QuestionViewController

代碼

QuestionViewController:

-(NSArray*)returnBarButtonItems 
{ 
    self.facebookItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"FacebookIcon.png"] style:UIBarButtonItemStylePlain target:nil action:@selector(facebookAction:)]; 
    self.leftarrow = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"LeftArrowIcon.png"] style:UIBarButtonItemStylePlain target:nil action:@selector(leftAction:)]; 
    self.rightarrow = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"RightArrowIcon.png"] style:UIBarButtonItemStylePlain target:nil action:@selector(rightAction:)]; 
    self.calcItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"CalculatorIcon.png"] style:UIBarButtonItemStylePlain target:nil action:@selector(calculatorAction:)]; 

    UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

    self.items = [NSArray arrayWithObjects:self.facebookItem, flexibleSpace, self.leftarrow, flexibleSpace,flexibleSpace,flexibleSpace,flexibleSpace, self.rightarrow,flexibleSpace, self.calcItem, nil]; 

    return self.items; 
} 

QuestionMultipleChoiceViewController:

self.toolbarItems = [self returnBarButtonItems]; 

問題

UIBarButtons被正確設置並顯示,但操作不會在按下時調用。

+0

問題是,你正在分配'nil'作爲目標,這意味着這些操作被髮送到'無' – tkanzakic 2013-04-25 20:25:33

+0

明白了。如果我不使用超類,它如何工作? – drc 2013-04-25 20:36:40

+0

爲什麼不添加這個作爲答案? – drc 2013-04-25 20:37:42

回答

0

功能initWithImage:style:target:action:documentation指出:

目標

接收動作消息的對象。

行動

行動派選擇了這個項目時的目標。

在你的情況要指定nil爲目標,造成發送到nil的動作,這就是爲什麼你的方法是不是被解僱。將nil替換爲self以更正此問題。

+2

以自我爲目標可能是正確的選擇,但這根本不是什麼零指標。無針對性的動作被髮送給第一響應者。 – 2013-09-19 01:04:44