Я создаю набор классов, которые взаимодействуют с веб-сервисом.В основе этого данные извлекаются из службы с использованием асинхронного NSUrlConnection.На мой взгляд, важно, чтобы он был асинхронным, поскольку клиент этих интерфейсов веб-службы должен иметь возможность отменить текущий запрос (т. Е. Отменить NSUrlConnection).
Вызовы веб-службывозвращает данные JSON, потенциально их много, и это анализируется, и создаваемые мной классы создают из них надлежащие структуры данных.В зависимости от того, какой метод веб-службы вызывается, запрос может оказаться дорогостоящим - слишком дорогим для выполнения в главном потоке, поэтому я хотел бы либо добавить опцию запуска запросов на обслуживание асинхронно, либо не давать опцию, а также принудительно устанавливатьасинхронные вызовы.
Асинхронные вызовы все в порядке, но у меня возникают проблемы с асинхронным запуском NSUrlConnection в цикле выполнения, который не является основным.Проблема, которую я описываю, кажется, довольно хорошо задокументирована: меня убеждают, что делегат NSUrlConnection не вызывается, потому что runloop, запускающий соединение, завершен, и, следовательно, вызовы к делегату не могут быть запланированы на его runloop.
Как лучше всего решить эту проблему?
Я пытался использовать:
while (!self.isRequestComplete && !self.isRequestCancelled)
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
Похоже, что он работает нормально из основной пробной версии, которую я имеюготово, за исключением того, что runloop, на котором это выполняется, на самом деле является основным runloop, для которого у меня было несколько сбоев ...
Будет ли вариант предлагать асинхронные вызовы клиентам, а затем использоватьВыше метод, если опция используется?Есть ли лучший способ добиться того, что я пытаюсь сделать?
Я стремлюсь достичь пакета классов, которые позволяют взаимодействовать с моим конкретным веб-сервисом, где клиенты моего кода не нуждаютсябеспокоиться о том, будут ли их собственные делегаты (на которые мои классы содержат ссылки) вызываться в разных потоках.Я хочу, чтобы они вызывались в том же цикле выполнения, в котором они вызывали мой код - в основном, именно так работает NSUrlConnection!
Заранее спасибо!Ник