У меня есть NSURLSession (с делегатом), который загружает некоторые данные. Я не хочу, чтобы метод, инициирующий загрузку (refresh
), возвращался до тех пор, пока не будет выполнен метод делегирования. Для этого у меня есть dispatch_semaphore_wait(self.waitSemaphore, timeout)
в конце refresh
. waitSemaphore
получает сигнал в конце соответствующего метода NSURLSessionDownloadDelegate.NSManagedObjectContext performBlockAndWait: и dispatch_semaphore, вызывающий тупик
Внутри этого метода делегата я вызываю другой метод, вызывающий performBlockAndWait
(довольно много раз) в NSManagedObjectContext. Этот MOC настроен с помощью NSPrivateQueueConcurrencyType
. При первом вызове performBlockAndWait
приложение блокируется. В performBlockAndWait
я делаю запрос на выборку, без других performBlockAndWaits
.
Методы NSURLSessionDownloadDelegate выполняются на основе собственного NSOperationQueue. Я не создаю эту очередь, она создается NSURLSession. Я только сталкиваюсь с вышеупомянутым тупиком, когда я вызываю refresh
из основного потока. Если я вызываю его из другой очереди, он работает так, как ожидалось.
Любая помощь с этим была бы высоко оценена.
Заранее спасибо.