首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个方法数组

创建一个方法数组
EN

Stack Overflow用户
提问于 2014-07-01 14:15:56
回答 8查看 152关注 0票数 1

我想创建一个方法的NSArray。

我有以下代码:

代码语言:javascript
复制
- (void) showText { NSLog(@"text1"); }
- (void) showText2 { NSLog(@"text2"); }
- (void) showText3 { NSLog(@"text3"); }

我想做这样的事情:

代码语言:javascript
复制
arrayOfMethods = [NSArray arrayWithObjects:[self showText], [self showText2], 
    [self showText3],  nil];

但是它似乎不起作用,因为返回值是空的,而不是(id)。但这就是我想要的!

最终目标是:

代码语言:javascript
复制
[cell.button addTarget:self action:@selector([arrayOfMethods 
    objectAtIndex:indexPath.item]) forControlEvents:UIControlEventTouchUpInside];
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2014-07-01 14:21:34

就像这样:

代码语言:javascript
复制
   arrayOfMethods = [NSArray arrayWithObjects:NSStringFromSelector(@selector(showText)), ..,  nil];
   ...
   SEL action = NSSelectorFromString([arrayOfMethods 
    objectAtIndex:indexPath.item])

   [cell.button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
票数 1
EN

Stack Overflow用户

发布于 2014-07-01 14:19:19

方法不是对象,因此没有资格存储在NSArray中。您可以将字符串存储为数组中的选择器,也可以将调用有关方法的块存储在数组中,但不能存储方法本身。

用于选择器的字符串数组:

代码语言:javascript
复制
NSArray *selectors = @[@"showText", @"showText2", @"showText3"];

然后你可以调用其中一个,比如中间的,就像这样:

代码语言:javascript
复制
SEL selector = NSSelectorFromString(selectors[1]);
[someObject performSelector:selector];

对于您正在考虑的情况,根本不清楚您是否需要方法;一组块可以很好地完成任务。

票数 4
EN

Stack Overflow用户

发布于 2014-07-01 14:29:27

您可能需要使用块并将它们传递给方法并执行它。

代码语言:javascript
复制
NSArray *callbacks = @[
                       ^(){
                          // do some magics stuff                           
                       },
                        ^(){
                          // do some magics stuff   
                        },
                       ];

execute([callbacks objectAtIndex:0])

-(void) execute:(void (^)())block{
    block();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24512507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档