dji*_*i33 12 iphone objective-c selector nsnotifications ios
刚开始使用iPhone开发和Objective-C
.
昨天我试图在我的视图中添加Observer以获取通知,并且我一直收到此错误:
unrecognized selector sent to instance
我追踪到这个事实,我需要将尾随冒号包含在我的selector参数中:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(nameOfMySelector:) name:@"BBLocationServicesAreDisabled" object:nil];
今天,我觉得我很聪明,因为在设置按钮的动作参数时,我记得我昨天的错误,并将冒号添加到动作参数中.action参数采用a @selector
,就像设置一个观察者的选择器参数一样NSNotification
,所以我认为我做的是正确的.
但是,使用以下代码:
[self.callToActionButton addTarget:self action:@selector(nameOfMySelector:) forControlEvents:UIControlEventTouchUpInside];
我得到完全相同的错误:
unrecognized selector sent to instance
是什么赋予了?为什么@selector
需要一个尾随冒号,另一个不需要?我应该遵循哪些规则应该包含哪些内容以及什么时候应该保留,以及为什么我不能总是只做一个或另一个?
谢谢!
rcw*_*cw3 30
正如boltClock所提到的,你所指的字符实际上是冒号.@selector(method)
和之间的区别@selector(method:)
是方法签名.第二个变体需要传递参数.
@selector(method)
期待这个方法: -(void)method
@selector(method:)
期待这个方法: -(void)method:(id)someParameter
你似乎在这里缺少一个概念:冒号在某种程度上是方法名称的一部分.例如,方法
-(IBAction) doIt:(id)sender;
Run Code Online (Sandbox Code Playgroud)
有名字doIt:
.因此,应使用冒号来引用此方法.
但是这种方法最后没有冒号
-(IBAction) doItWithoutParameter;
Run Code Online (Sandbox Code Playgroud)
接受多个参数的方法也是如此,它们的名称相似 doItWithParam1:andParam2:
小智 6
选择器表示方法名称,选择器中的冒号数与相应方法中的参数数相匹配:
mySelector
- 没有冒号,没有参数,例如- (void)mySelector;
,[self mySelector];
mySelectorWithFoo:
- 一个冒号,一个参数,例如- (void)mySelectorWithFoo:(Foo *)foo;
,[self mySelectorWithFoo:someFoo];
mySelectorWithFoo:withBar:
- 两个冒号,两个参数,例如- (void)mySelectorWithFoo:(Foo *)foo bar:(Bar *)bar;
,[self mySelectorWithFoo:someFoo bar:someBar];
等等.
也可以选择没有"命名"参数的选择器.不建议这样做,因为它不能立即清楚参数是什么:
mySelector::
- 两个冒号,两个参数,例如- (void)mySelector:(Foo *)foo :(Bar *)bar;
,[self mySelector:someFoo :someBar];
mySelector:::
- 三个冒号,三个参数,例如- (void)mySelector:(int)x :(int)y :(int)z;
,[self mySelector:2 :3 :5];
归档时间: |
|
查看次数: |
5562 次 |
最近记录: |