2011-09-02 137 views
1

我在UIView一個按鈕時,像這樣創建:按UIButton的結果無法識別選擇錯誤

UIBarButtonItem *editButton = 
     [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                 target:self  
                 action:@selector(toggleEdit)]; 
self.navigationItem.rightBarButtonItem = editButton; 
[editButton release]; 

這是操作方法:

-(void) toggleEdit:(id)sender 
{ 
} 

,但我得到這個錯誤

2011-09-02 15:27:13.362 blubb [15006:207] - [DatabaseSelectionViewController toggleEdit]:發送到inst的無法識別的選擇器ANCE 0x5a29d80 2011-09-02 15:27:13.365 blubb [15006:207] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: ' - [DatabaseSelectionViewController toggleEdit]:無法識別的選擇發送到實例0x5a29d80'

這是怎麼發生的?

回答

5

更改

@selector(toggleEdit) 

@selector(toggleEdit:) 
+1

thx我沒有看到這個1小時 – Sebastian

7

爲您選擇正確的名稱是

@selector(toggleEdit:) 

沒有它看起來與此簽名的方法:

-(void) toggleEdit // No parameters 
{ 
} 

當你居然還宣稱:

-(void) toggleEdit:(id)sender 
{ 
} 
1

應該是:

-(IBAction) toggleEdit:(id)sender {} 

@selector(toggleEdit:) 
1

嘗試:

UIBarButtonItem *editButton = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
target:self action:@selector(toggleEdit) forControlEvents:UIControlEventTouchUpInside]; 
2

對於其他任何人不知所措,你也可以收到那些「無法識別的選擇器發送到實例0x ...」錯誤,當你不再擁有一些東西,語句指向內存中的一些垃圾地址。

+0

雖然在這個特定的情況下,正如其他人所說的,@選擇器缺少冒號。 – sonofapinch

+0

thx這個建議 – Sebastian

1

您嘗試使用的方法需要一個參數,這意味着它的名稱中有一個冒號 - 冒號實際上是的一部分,名稱爲。您需要包括結腸當你選擇:

@selector(toggleEdit:) 

參考的Objective-C編程語言的Message Syntax部分:

一個選擇名稱包括名稱的所有部分,包括冒號,因此前面示例中的選擇器名爲setOriginX:y:。它有兩個冒號,因爲它需要兩個參數。但是,選擇器名稱不包含任何其他內容,例如返回類型或參數類型。

0

如果您正在使用故事板。有時它有助於從故事板中刪除按鈕,並放置一個新按鈕,並進行必要的連接。

相關問題