有没有办法在选择器中发送BOOL?
[self performSelector:@selector(doSomething:) withObject:YES afterDelay:1.5];
Run Code Online (Sandbox Code Playgroud)
或者我应该使用NSInvocation?有人可以写一个样品吗?
Tom*_*ift 65
如果你不能改变目标方法签名来接受a NSNumber代替BOOL你可以使用NSInvocation而不是performSelector:
MyTargetClass* myTargetObject;
BOOL myBoolValue = YES; // or NO
NSMethodSignature* signature = [[myTargetObject class] instanceMethodSignatureForSelector: @selector( myMethodTakingBool: )];
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: signature];
[invocation setTarget: myTargetObject];
[invocation setSelector: @selector( myMethodTakingBool: ) ];
[invocation setArgument: &myBoolValue atIndex: 2];
[invocation invoke];
Run Code Online (Sandbox Code Playgroud)
Niv*_*Niv 56
你可以使用NSNumber来包装bools类型:
BOOL myBool = YES;
NSNumber *passedValue = [NSNumber numberWithBool:myBool];
[self performSelector:@selector(doSomething:) withObject:passedValue afterDelay:1.5];
Run Code Online (Sandbox Code Playgroud)
在选择器中,要获取bool值,请使用:
BOOL value = [recievedObject boolValue];
Run Code Online (Sandbox Code Playgroud)
mal*_*lex 19
最简单的方法如下:
如果你有方法
-(void)doSomething:(BOOL)flag
Run Code Online (Sandbox Code Playgroud)
并希望执行带有flag = NO使用的Selecor
[object performSelector:@selector(doSomething:) withObject:nil];
Run Code Online (Sandbox Code Playgroud)
如果是flag = YES,您可以发送任何对象,例如@YES - 来自bool的数字
[object performSelector:@selector(doSomething:) withObject:@YES];
Run Code Online (Sandbox Code Playgroud)
注意:不要使用@NO!在bool参数的方法中,只有nil会被解释为NO.
小智 14
在主线程中使用dispatch_after,如下所示:
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (_animationDuration+1) * NSEC_PER_SEC);
dispatch_after(delayTime, dispatch_get_main_queue(), ^{
[self completeAnimation:NO];
});
Run Code Online (Sandbox Code Playgroud)
如果你想传递NO,只有NO,你可以改为零
Run Code Online (Sandbox Code Playgroud)[self performSelector:@selector(doSomething:) withObject:0 afterDelay:1.5];
但请记住,只需工作为零,不用ARC编译,不允许隐式转换
另一种方法是传递nilfor NO和anything elseforYES
[self performSelector:@selector(doSomething :) withObject:nil];
doSomething for BOOL参数将具有NO值
-
[self performSelector:@selector(doSomething :) withObject:[NSNumber numberWithBool:YES]];
doSomething for BOOL参数将具有YES值
-
[self performSelector:@selector(doSomething :) withObject:[NSNumber numberWithBool:NO]];
doSomething for BOOL参数将具有YES值(甚至传递的数字为NO)
| 归档时间: |
|
| 查看次数: |
29416 次 |
| 最近记录: |