остановите и перезапустите метод - PullRequest
0 голосов
/ 29 ноября 2011

Мне нужно остановить и перезапустить простой метод, выполнение которого занимает от 1 до 2 секунд. Как это можно сделать? Я уже пробовал [NSObject cancelPreviousPerformRequestsWithTarget:self], но после задержки он работает только с перенаправителем. Я также пытался создать новую тему, но она не работает ...

Это мой метод:

-(IBAction)MyMethod
{   
    NSLog(@"start");

    //Here is the code that takes time to execute. It regards UI intervention,graphic calculation, x and y position etc.

    NSLog(@"end");
}

Мне нужен этот эффект: один щелчок по связанному UIButton и запуск метода (поэтому распечатайте журнал начала и окончания журнала). Если щелкнуть ссылку UIButton до печати NSLog, метод должен остановиться. Это возможно?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Вы захотите использовать фоновое задание.Я бы предложил создать подкласс и использовать NSOperation и проверить на isCancelled в теле main.См. Документацию Apple по использованию NSOperation и NSOperationQueue .

0 голосов
/ 29 ноября 2011

Ну, чтобы сделать это с потоками, я обычно делю вещи на 3 секции:

  • start.
  • processing.
  • finish.

И это выглядит так:

-(void)start:(id)sender{
    //prepare everything and anything
    [NSThread detachNewThreadSelector:@selector(processing:) toTarget:self withObject:nil];
}

-(void)processing:(id)sender{
    //Perform all your calculations, you can't modify UI elements here

    [self performSelectorOnMainThread:@selector(finish:) withObject:nil waitUntilDone:NO];
}

-(void)finish:(id)sender{
    //Wrap everything up and do any modifications to the UI
}

Теперь, чтобы отменить это, вы можете добавить, возможно, использовать:

Отменяет выполнение запросов, ранее зарегистрированных в executeSelector:withObject: afterDelay:.

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...