菊花链函数调用(方法1调用方法2,方法2调用方法3)

时间:2011-08-02 21:29:47

标签: objective-c

我有一个调用另一个函数的函数。我希望第二个函数调用第三个函数。然后他们都返回第一个函数并完成代码;

-(void) select
{
  //do code
  [self drawMap];
}

-(void) drawMap
{
  //do code
  [self performSelector:@selector(showActionSheet) withObject:nil afterDelay:2];
}

-(void) showActionSheet
{
  //do code
}

但是showActionSheet函数没有被调用,它没有被触发。

编辑:但如果我改变

[self performSelector:@selector(showActionSheet) withObject:nil afterDelay:2]; 

[self showActionSheet];

它工作正常。但我想延迟几秒钟的动作表显示,以便用户可以看到对地图的更改。

2 个答案:

答案 0 :(得分:0)

我认为你需要在showActionSheet方法中添加一个id参数,以使performSelector:withObject:afterDelay方法正常工作。

尝试将方法的签名更改为:

-(void) showActionSheet:(id) obj { ... }

随着@ MByD的添加,您需要在选择器中添加一个冒号:

[self performSelector:@selector(showActionSheet:) withObject:nil afterDelay:2]; 

答案 1 :(得分:0)

你是否在一个没有 NSRunLopp 的主题中这样做,因为 NSRunLoop 不仅负责处理输入,而且还负责执行定时行动。

如果你有一些代码在返回你的 NSRunLoop 也可能没有机会等待输入和触发定时事件> NSRunLoop 然后你的 NSRunLoop 在此之前不会做任何改变。

另一种可能性是,如果您以奇怪的方式设置了 NSRunLoop ,则可能需要使用

- [NSObject performSelector:(SEL)aSelector
                 withObject:(id)anArgument
                 afterDelay:(NSTimeInterval)delay
                    inModes:(NSArray *)modes];

而是尝试使用除行默认值( NSDefaultRunLoopMode )之外的其他模式。