Лучший способ реализовать рабочий процесс, основанный на серии асинхронных запросов ASIHTTP в iOS? - PullRequest
0 голосов
/ 23 сентября 2011

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

Работает следующим образом:

  1. Загрузить список элементов (1 одиночный ASIHTTPRequest, добавленный в очередь).
  2. Элементы, полученные на шаге 1, должны быть сохранены.
  3. Каждый элемент из 1 затем анализируется, ставя в очередь 1 ASIHTTPRequest за элемент для его подпунктов.
  4. Каждый запрос на шаге 3 обрабатывается, а подпункты сохраняются.

Мне нужно иметь возможность обновлять пользовательский интерфейс, отображая его возраст и сообщения. Я не могу за всю свою жизнь найти чистый / понятный способ сделать это.

Я просмотрел следующие ссылки:

Но либо я что-то упускаю, либо они, кажется, неадекватно описывают то, чего я пытаюсь достичь.

Могу ли я использовать блоки?

1 Ответ

0 голосов
/ 20 декабря 2011

Я вижу, что столкнулся с довольно похожей проблемой, когда я получил упражнение для работы с приложением, использующим набор асинхронных обработчиков http и ftp в наборе процессов и рабочих процессов.Я не знаю об ASIHTTP API, но я предполагаю, что я сделал что-то подобное.Я определил так называемое RequestOperationQueue, которое может, например, представлять все операции запроса определенного рабочего процесса.Также я определил несколько шаблонных операций, например, FTPDownloadOperation.И тут приходит ключ.Я реализовал все эти RequestOperations более или менее в соответствии с идеей http://www.dribin.org/dave/blog/archives/2009/05/05/concurrent_operations/. Вместо реализации логики делегата в самой операции, я реализовал как обработчики обратного вызова, специализированные для различных протоколов (http, ftp, rsync и т. Д.), Обеспечивающихсвойство status для определенного запроса, который может быть обработан операцией через KVO.Пользовательский интерфейс может быть уведомлен о рабочем процессе, например, по протоколу делегата для RequestOperationQueue.например didReceiveCallbackForRQOperation: (RequestOperation) rqo.С моей точки зрения, кодирование рабочих процессов, включая клиент-серверные операции, очень удобно при таком подходе.

...