Pressing UIButton results in Unrecognized Selector error
I have a button in my UIView
that is created like so:
UIBarButtonItem *editButton =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit
target:self
action:@selector(toggleEdit)];
self.navigationItem.rightBarButtonItem = editButton;
[editButton release];
And this is the action method:
-(void) toggleEdit:(id)sender
{
}
but I get this error
2011-09-02 15:2开发者_运维百科7:13.362 blubb[15006:207] -[DatabaseSelectionViewController toggleEdit]: unrecognized selector sent to instance 0x5a29d80 2011-09-02 15:27:13.365 blubb[15006:207] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DatabaseSelectionViewController toggleEdit]: unrecognized selector sent to instance 0x5a29d80'
Why is this happening?
The correct name for your selector is
@selector(toggleEdit:)
Without the : it would look for a method with this signature:
-(void) toggleEdit // No parameters
{
}
When you actually have declared:
-(void) toggleEdit:(id)sender
{
}
Change
@selector(toggleEdit)
to
@selector(toggleEdit:)
For anyone else stumbling across this, you can also receive those "unrecognized selector sent to instance 0x..." errors when you no longer own something and the statement is pointing to some junk address in memory.
should be:
-(IBAction) toggleEdit:(id)sender {}
and
@selector(toggleEdit:)
Try:
UIBarButtonItem *editButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemEdit
target:self action:@selector(toggleEdit) forControlEvents:UIControlEventTouchUpInside];
The method you're trying to use takes an argument, which means that it has a colon in its name -- the colon is actually part of the name. You need to include that colon when you get the selector:
@selector(toggleEdit:)
Refer to the Message Syntax section of The Objective-C Programming Language:
A selector name includes all the parts of the name, including the colons, so the selector in the preceding example is named
setOriginX:y:
. It has two colons, because it takes two parameters. The selector name does not, however, include anything else, such as return type or parameter types.
If you are using a storyboard. Sometimes it helps to remove the button from the storyboard, and put a new button, and make the necessary connections.
精彩评论