Pressing UIButton results in Unrecognized Selector error

有些话、适合烂在心里 提交于 2019-11-28 11:14:42

问题


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:27: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?


回答1:


Change

@selector(toggleEdit)

to

@selector(toggleEdit:)



回答2:


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
{
}



回答3:


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.




回答4:


should be:

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

and

@selector(toggleEdit:)



回答5:


Try:

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



回答6:


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.




回答7:


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.



来源:https://stackoverflow.com/questions/7284116/pressing-uibutton-results-in-unrecognized-selector-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!