我有一个调用另一个函数的函数。我希望第二个函数调用第三个函数。然后他们都返回第一个函数并完成代码;
-(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];
它工作正常。但我想延迟几秒钟的动作表显示,以便用户可以看到对地图的更改。
答案 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 )之外的其他模式。