2016-07-15 4 views
0

Я реализовал поиск и для каждого нового символа, введенного пользователем performFetch:, запущен внутри performBlock:. Если строка поиска изменится, я хотел бы отменить предыдущий начальный блок и начать все заново. Как я могу отменить или хотя бы проинформировать об этом блок внутри performBlock:?Как отменить executeBlock:

Пример кода я прямо сейчас:

[myManagedObjectContext performBlock:^{ 
     // fetch from background queue 
     if([[self fetchedResultsController] performFetch:nil]) { 
      // update the view from the main queue 
      // don't do this if performBlock already got started again! but how? 
      [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 
       // refresh UI 
      }]; 
     } 
    }]; 

ответ

2

Там нет API для отмены performBlock. После его запуска он продолжается до тех пор, пока он не завершится, или пока ваш код return s не появится.

Если вам необходимо отменить выборки во время их выполнения, просмотрите NSAsynchronousFetchRequest, что позволяет аннулировать его с помощью NSProgress. Асинхронные запросы на выборку и отмена описаны в WWDC 2014 Core Data session

+0

Спасибо за этот простой и понятный ответ. 'NSAsynchronousFetchRequest' выглядит как хорошее решение –

 Смежные вопросы

  • Нет связанных вопросов^_^