NSInvocation NSTimer和NSMethodSignature的问题

时间:2012-02-11 03:02:31

标签: iphone objective-c

我试图获得一个按钮来创建一个NSTimer,然后调用一个函数(refreshView)来刷新UI元素,但是我遇到了问题,我不确定问题出在哪里。方法签名是错误的吗?或者我是否将NSRunLoop部分弄错了?还是只是可怕的基地?任何帮助表示赞赏。

-(IBAction)reload:(id)sender{
NSInvocation *displayInvocation = [NSInvocation invocationWithMethodSignature:[self     methodSignatureForSelector:@selector(refreshView)]];
[displayInvocation setTarget:self];
NSTimer *slideShowTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
                                                     invocation:displayInvocation
                                                          repeats:YES];
[slideShowTimer fire];
NSRunLoop * a = [NSRunLoop currentRunLoop];
[a addTimer:slideShowTimer forMode:NSRunLoopCommonModes];}

-(void)refreshView{
[slideshow1 displayWithView:MajorImageView topicLabel:TopicLabel];
}

1 个答案:

答案 0 :(得分:2)

你的代码似乎很复杂。你想(1)启动定时器定期调用[refreshView],或者(2)稍后调用它。

对于(1),只需使用

设置计时器
[NSTimer scheduledTimerWithTimeInterval:(NSTimeInterval)seconds 
                                 target:(id)target 
                               selector:(SEL)aSelector 
                               userInfo:(id)userInfo 
                                repeats:(BOOL)repeats]

无需使用方法调用,目标/操作就足够了

对于(2),如果你想稍后再打电话,

[NSObject performSelector:(SEL)aSelector 
               withObject:(id)anArgument 
               afterDelay:(NSTimeInterval)delay]