2011-12-23 57 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