Как сделать периодический вызов метода в цели c? - PullRequest
4 голосов
/ 23 декабря 2011

если вопрос не объяснен, пожалуйста, извините.Я разрабатываю приложение клиент-сервер для iphone, я создал все классы, экземпляры и т. Д.Я даже могу отправить get и проанализировать ответ тоже. В любом случае, теперь мне нужно, чтобы мой метод вызывался через определенный промежуток времени (например, вызывать его повторно через 10 секунд).Я много гуглил, а также взглянул на

NSDate , но не смог решить .. Теперь, кто-нибудь может помочь мне, как справиться с этой ситуацией?Большое спасибо

Ответы [ 4 ]

14 голосов
/ 23 декабря 2011

Вы можете создать и запланировать экземпляр NSTimer для вызова вашего метода в заданный интервал времени. Смотрите, в частности, следующий удобный метод создания:

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

http://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/Classes/NSTimer_Class/Reference/NSTimer.html

4 голосов
/ 24 декабря 2011

Лучше всего посмотреть на Grand Central Dispatch , так как вы хотите запустить его в фоновом режиме:

Используйте NSTimer, упомянутый выше.

3 голосов
/ 24 декабря 2011

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. затем вызовите аннулировать, чтобы остановить его. Мне пришлось создать отдельный метод sendJoin, потому что я не мог получить числа для правильной передачи в метод. но если у вас нет никаких параметров, это еще проще. просто используйте синтаксис таймера для его создания, а затем сделайте его недействительным, когда вы закончите

3 голосов
/ 24 декабря 2011

То, что вы хотите, это метод NSObject -performSelector:withObject:afterDelay:.

Нажмите для документов .

Если у вас есть метод, который он вызывает, снова вызовите его, у вас будет циклический, самовоспламеняющийся метод отложенного опроса.

Я бы порекомендовал проверить переменную класса, чтобы узнать, действительно ли вы имеете это в виду каждый раз, чтобы вы могли отключить ее извне.

...