Я думаю, что мой ответ поможет с вашей проблемой - Здесь я пытаюсь вызвать мой запрос ASIHTTP в GCD. Но блоки завершения и блоки с ошибками не выполняются
Короче - не используйте GCD. используйте ASINetworkQueue.
EDIT:
Джонатан, я не сравнивал. Ваше текущее решение просто неверно.
То, что вы сейчас делаете, запускает асинхронный запрос, который является операцией, выполняемой в другом потоке. В блоках завершения / ошибки, которые будут выполняться в одном и том же потоке, вы запрашиваете некоторую глобальную очередь (то есть поток) и перемещаете в нее все операции.
Проблема в том, что GCD - это не волшебство, а очень удачная неоднозначность потоков. Предполагается, что он запускается в главном потоке и перемещается назад и вперед между потоками.
Если вы действительно хотите освоить трудный путь, то вот мои мысли о том, как вы используете GCD:
Я предполагаю, что вы пытаетесь получить данные, проанализировать их и обновить графический интерфейс, используя метод DisplayNews. если это так, а также при условии, что вы должны использовать глобальную очередь, а не создавать собственную очередь, это то, как вы должны это сделать:
dispatch_async(JSONProcessingQueue, ^{
NSData *responseData = [request responseData];
[self processData:responseData];
dispatch_sync(dispatch_get_main_queue(), ^{
[self DisplayNews];
});
});