ios — загружать новое представление как модальное и поддерживать работу асинхронного кода gcd

Я использую dispatch_async для запуска части кода (конкретного метода) в параллельной очереди (серия проверок подключения, не очень важно)

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
        [self connectivityChecks];
});

Все работает нормально с этим, пока на текущем контроллере представления.

Что я хотел бы сделать (если это возможно), так это модально загрузить новый контроллер представления и сохранить этот раздел кода работающим, поскольку он будет запускать некоторые события на новом контроллере представления на основе проверок, которые он выполняет. Используя это, чтобы загрузить новый вид.

CustomViewController *customLoader = [[CustomViewController alloc] init];
[customLoader setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentViewController:customLoader animated:YES completion:nil];

Возможно ли вообще, чтобы это работало таким образом? Если нет, как я могу добиться чего-то в этом направлении?


person ladansedesdamnes    schedule 15.09.2015    source источник
comment
Я думаю, вам нужен другой экземпляр класса, который будет отвечать за асинхронную задачу. Вы можете создать новый перед созданием вашего customLoader, у которого будет наблюдатель за событием, запущенным асинхронной задачей.   -  person Jan ATAC    schedule 15.09.2015
comment
Итак, вы имеете в виду наличие отдельного класса со всеми асинхронными проверками, инициализацию его (новый экземпляр) и затем вызов нового представления? Но не будет ли экземпляр отброшен вместе со всеми другими переменными контроллера представления, как только я загружу новый?   -  person ladansedesdamnes    schedule 16.09.2015
comment
@CanATAC создал собственный класс для проверок и загрузил его асинхронно, и это сработало как шарм! Не могли бы вы написать это как ответ, чтобы я мог принять его?   -  person ladansedesdamnes    schedule 17.09.2015
comment
ой ? Благодарность ! не было времени, чтобы проверить ваш первый комментарий... но рад, что вы это сделали!   -  person Jan ATAC    schedule 17.09.2015


Ответы (1)


Я превращаю свой комментарий в более подробный ответ:

  1. В вашем CustomViewController добавьте наблюдателя уведомлений с именем, ну, скажем: 'com.myapp.connected'
  2. В том же CustomViewController не забудьте удалить обозреватель, когда он исчезнет
  3. Создайте новый пользовательский класс, скажем: «TaskManager»
  4. Вставьте ответственный метод для запуска в нем асинхронной задачи

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    [self connectivityChecks];
    

    });

  5. В настройках подключения разместите уведомление с именем «com.myapp.connected», когда операция подключения прошла успешно.
  6. Из вашего вызывающего класса создайте экземпляр TaskManager.
  7. В вызывающем классе создайте экземпляр CustomViewController.
person Jan ATAC    schedule 17.09.2015