我想创建一个方法的NSArray。
我有以下代码:
- (void) showText { NSLog(@"text1"); }
- (void) showText2 { NSLog(@"text2"); }
- (void) showText3 { NSLog(@"text3"); }我想做这样的事情:
arrayOfMethods = [NSArray arrayWithObjects:[self showText], [self showText2],
[self showText3], nil];但是它似乎不起作用,因为返回值是空的,而不是(id)。但这就是我想要的!
最终目标是:
[cell.button addTarget:self action:@selector([arrayOfMethods
objectAtIndex:indexPath.item]) forControlEvents:UIControlEventTouchUpInside];发布于 2014-07-01 14:21:34
就像这样:
arrayOfMethods = [NSArray arrayWithObjects:NSStringFromSelector(@selector(showText)), .., nil];
...
SEL action = NSSelectorFromString([arrayOfMethods
objectAtIndex:indexPath.item])
[cell.button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];发布于 2014-07-01 14:19:19
方法不是对象,因此没有资格存储在NSArray中。您可以将字符串存储为数组中的选择器,也可以将调用有关方法的块存储在数组中,但不能存储方法本身。
用于选择器的字符串数组:
NSArray *selectors = @[@"showText", @"showText2", @"showText3"];然后你可以调用其中一个,比如中间的,就像这样:
SEL selector = NSSelectorFromString(selectors[1]);
[someObject performSelector:selector];对于您正在考虑的情况,根本不清楚您是否需要方法;一组块可以很好地完成任务。
发布于 2014-07-01 14:29:27
您可能需要使用块并将它们传递给方法并执行它。
NSArray *callbacks = @[
^(){
// do some magics stuff
},
^(){
// do some magics stuff
},
];
execute([callbacks objectAtIndex:0])
-(void) execute:(void (^)())block{
block();
}https://stackoverflow.com/questions/24512507
复制相似问题