edo*_*lin 3 iphone objective-c selector
我想调用具有通常的NSError**参数的方法的选择器:
-(int) getItemsSince:(NSDate *)when dataSelector:(SEL)getDataSelector error:(NSError**)outError {
NSArray *data = nil;
if([service respondsToSelector:getDataSelector]) {
data = [service performSelector:getDataSelector withObject:when withObject:outError];
// etc.
Run Code Online (Sandbox Code Playgroud)
...编译器不喜欢的:
warning: passing argument 3 of 'performSelector:withObject:withObject:' from incompatible pointer type
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以将指针封装在一个对象中呢?
Mar*_*don 14
查看NSInvocation,它允许您以更灵活的方式"performSelector".
这里有一些代码可以帮助您入门:
if ([service respondsToSelector:getDataSelector]) {
NSArray *data;
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
[service methodSignatureForSelector:getDataSelector]];
[invocation setTarget:delegate];
[invocation setSelector:getDataSelector];
// Note: Indexes 0 and 1 correspond to the implicit arguments self and _cmd,
// which are set using setTarget and setSelector.
[invocation setArgument:when atIndex:2];
[invocation setArgument:outError atIndex:3];
[invocation invoke];
[invocation getReturnValue:&data];
}
Run Code Online (Sandbox Code Playgroud)