2011-12-23 58 views
4

如果问题没有解释清楚请原谅我。 我正在开发iphone客户端 - 服务器应用程序,我创建了所有的类,实例和ect。我甚至可以发送和解析响应。无论如何,现在我需要在定义的时间段内调用我的方法(例如,在10秒内重复调用它)。我GOOGLE了很多,也看看如何定期调用目标c中的方法?

NSDate但我无法解决..现在,任何人都可以请帮助我如何处理这种情况?非常感谢您

回答

3

你想要的是NSObject的方法-performSelector:withObject:afterDelay:

Click for docs

如果你有它调用它的方法再次调用它,你将会有一个循环的自激延迟轮询方法。

我建议检查一个类变量,看看你是否真的每次都是这样,所以你可以从外面关掉它。

+0

非常感谢你,我看着你现在发送的方法,因为我知道这是我正在寻找的exatly。 – 2011-12-23 20:08:32

4

最好的办法是寻找到Grand Central Dispatch,因为你将要在后台运行,这样的:

使用NSTimer如上所述。

+0

绝对正确,它将免于运行。谢谢你 – 2011-12-23 20:11:54

3

Grand Central Dispatch将创建一个不同的线程来运行。所以如果计时器方法(如下所示和上面提出的)滞后于你的应用程序,你将需要把这个命令放在一个单独的线程中。

NSTimer虽然你应该使用。例如,如果你想重复从按下按钮开始,你可以做一个方法这

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [cameraControlButtonUp addTarget:self action:@selector(cameraControlButtonUpPressed) 
      forControlEvents:UIControlEventTouchUpInside]; 
} 

-(IBAction)buttonDown:(id)sender{ 
    NSInteger tag = [sender tag]; 

    if (tag==1) { 
     buttonCounter=1; 
     timer = [[NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(sendJoin) userInfo:nil repeats:YES]retain]; 
    } 
} 

-(void)sendJoin 
{ 
    switch (buttonCounter) { 
     case 1: 
      [cClient userDigitalPushAndRelease:372]; 
      break; 
     default: 
      break; 
    } 
} 

    -(void)cameraControlButtonUpPressed 
    { 
     [timer invalidate]; 
    } 

,将重复的命令,直到松开按钮。请记住,您需要将ibaction与按钮事件关联(仅限按钮事件)。以及在.h中创建计时器,并将该按钮标记为1,以便使用该按钮。

为更基本的例子;它很简单。只需创建您的方法来调用,定时器并设置重复为YES。然后调用invalidate来停止它。我不得不创建一个单独的方法sendJoin,因为我不能让数字正确传递给该方法。但如果你没有任何参数,它就更容易了。只是使用计时器语法来创建它,然后使其无效当你完成

+0

谢谢你,现在我的Mac不在我身边,我会尝试你已经解释过的。我不是一个有经验的程序员,尽管我对C,C++和Java有很多了解,但我并不擅长编码。所以你的例子真的是我处理我的问题的神点 – 2011-12-23 22:24:44

+0

再次感谢人..我使它与NSTimer一起工作.. – 2011-12-26 01:27:48

+0

不要忘记标记答案 – 2011-12-27 16:01:34