Лучшие практики для кодирования вызовов асинхронных веб-сервисов на iOS - PullRequest
1 голос
/ 19 сентября 2011

У меня есть приложение для iPhone, которое общается с веб-службами и передает данные из веб-службы на устройства.Вставляет данные в базовые данные и затем обновляет графический интерфейс.

Процесс, выполняемый следующим образом:

  1. Событие GUI создает вызов на уровне транзакций (модели).
  2. Уровень транзакции (модель) создает асинхронный вызов веб-службы.
  3. Ответ, полученный от веб-службы, проанализированный уровнем транзакции (проверка на наличие ошибок).Загрузка результатов в основные данные.
  4. Отправка уведомления (с ошибкой или без ошибки) для обновления графического интерфейса.

У меня много таких асинхронных вызовов, чтобы обновить различные частиданных.И мои клиенты GUI подписаны на ряд этих уведомлений.

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

Что я действительно хотел бы сделать, так это иметь некоторую функцию-обертку вокруг элементов 2, 3 и 4. Чтобы код выглядел более ориентированным на поток.

if (![TransactionLayerModelClass getDataFromWebServerWrapper: args]) {
    // error actions
} else {
    // good actions
}

Я даже не уверен, что это возможно, и не нашел каких-либо решений в моем поиске.Но если это так, я думаю, это значительно улучшит читабельность моего кода.

1 Ответ

2 голосов
/ 19 сентября 2011

Чтобы написать код, который будет выглядеть так, как вам нужно, вы захотите использовать блоки:

[TransactionLayerModelClass 
     getDataFromWebServerWrapper: args
     errorBlock:^(NSError* error)
        {
           // error actions
        }
     successBlock:^(NSData* data)
        {
           // good actions
        }];

Блоки доступны только при таргетинге на iOS 4 и выше.Они очень полезны, и хотя ими легко злоупотреблять и злоупотреблять, это одно из их идеальных приложений при правильной реализации.

http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...