如果問題沒有解釋清楚請原諒我。 我正在開發iphone客戶端 - 服務器應用程序,我創建了所有的類,實例和ect。我甚至可以發送和解析響應。無論如何,現在我需要在定義的時間段內調用我的方法(例如,在10秒內重複調用它)。我GOOGLE了很多,也看看如何定期調用目標c中的方法?
NSDate但我無法解決..現在,任何人都可以請幫助我如何處理這種情況?非常感謝您
如果問題沒有解釋清楚請原諒我。 我正在開發iphone客戶端 - 服務器應用程序,我創建了所有的類,實例和ect。我甚至可以發送和解析響應。無論如何,現在我需要在定義的時間段內調用我的方法(例如,在10秒內重複調用它)。我GOOGLE了很多,也看看如何定期調用目標c中的方法?
NSDate但我無法解決..現在,任何人都可以請幫助我如何處理這種情況?非常感謝您
您可以創建並安排NSTimer
的實例在給定的時間間隔內調用您的方法。具體見以下便捷的創建方法:
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
你想要的是NSObject的方法-performSelector:withObject:afterDelay:
。
如果你有它調用它的方法再次調用它,你將會有一個循環的自激延遲輪詢方法。
我建議檢查一個類變量,看看你是否真的每次都是這樣,所以你可以從外面關掉它。
最好的辦法是尋找到Grand Central Dispatch,因爲你將要在後臺運行,這樣的:
使用NSTimer
如上所述。
絕對正確,它將免於運行。謝謝你 – 2011-12-23 20:11:54
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
,因爲我不能讓數字正確傳遞給該方法。但如果你沒有任何參數,它就更容易了。只是使用計時器語法來創建它,然後使其無效當你完成
謝謝你,現在我的Mac不在我身邊,我會嘗試你已經解釋過的。我不是一個有經驗的程序員,儘管我對C,C++和Java有很多瞭解,但我並不擅長編碼。所以你的例子真的是我處理我的問題的神點 – 2011-12-23 22:24:44
再次感謝人..我使它與NSTimer一起工作.. – 2011-12-26 01:27:48
不要忘記標記答案 – 2011-12-27 16:01:34
非常感謝你,我看着你現在發送的方法,因爲我知道這是我正在尋找的exatly。 – 2011-12-23 20:08:32