我需要在NSMutableArray
数组:
[_array addObject:@selector(myFunction:)];
功能:
- (void) myFunction:(NSString*)someParam {}
错误:
Incompatible pointer types sending 'SEL' to parameter 'id'
我该怎么做? :/
目的是随机调用数组函数
此致
答案 0 :(得分:3)
您只能在NSArray中存储对象。但是SEL
不是那些(它被定义为指向<objc/objc.h>
中结构的指针)。
为了让您的选择器存储在数组中,您必须将其打包在NSValue
对象中,如下所示:
[_array addObject:[NSValue valueWithPointer:@selector(myFunction:)]];
稍后,当您真正想要使用选择器时,您需要将其解压缩,如下所示:
SEL mySelector = [_array[0] pointerValue];
[target performSelector:mySelector];
答案 1 :(得分:1)
另一种选择是使用块。对于功能
-(void)myFunction{
}
通过执行类似
的操作创建一个块void (^CallingBlock)()=^(){
[self myFunction];
};
然后正常添加到数组
NSMutableArray *array=[[NSMutableArray alloc] init];
[array addObject:CallingBlock];
然后执行块
[[NSOperationQueue mainQueue] addOperationWithBlock:[array objectAtIndex:0]];
答案 2 :(得分:1)
您无法为数组添加选择器,因为SEL
不是对象类型。
如果您需要存储方法和参数,可以创建一个NSInvocation
对象并将其存储在数组中。