2013-04-22 2 views
0

В типичной многоуровневой архитектуре, как я могу эффективно передавать ошибки, возникающие на уровне доступа к данным, до UIViewContoller?распространять ошибки в стеке вызовов - цель c

Я следующий дизайн:

UIViewController с -> datacontroller -> specificserviceproxy -> serviceproxybase

serviceproxybase инициирует вызовы на веб-службы. Я проверяю наличие сети перед вызовом операций в веб-службе и хочу предупредить пользователей в случае сбоя сети.

Какое оптимальное решение? Благодарю.

ответ

1

Следуйте рисунку, используемому мной в основном из какао-касания. Многие методы возвращают nil или NO при возникновении ошибки, и такие методы имеют параметр NSError out с подробной информацией об ошибке.

Вы можете распространять результат и вызывать ошибки по мере необходимости. Или слой может обернуть ошибку с более специфичной для уровня ошибки и передать новую ошибку.

Пример методы, которые следуют этому шаблону:

NSFileManager copyItemAtPath:toPath:error: 
NSFileManager attributesOfItemAtPath:error: 
+0

Хороший план. Приложение: внимательно рассмотрите, какие ошибки стоит представить пользователю, и как вы их представляете. В мобильной среде вы должны ожидать пятнистое подключение, и вашему пользователю не следует отключать оповещение каждые 30 секунд только из-за сбоя вашего автоматического подключения к твитам в фоновом режиме. Сообщить об ошибках ненавязчиво, если вообще, или только в ответ на прямое действие пользователя. – rickster

+0

спасибо за ответы ребята. теперь я запутался в выборе своей реализации. оба варианта кажутся мне логичными. каковы факторы, влияющие на мое решение? – joblot

+0

Мой ответ полезен, когда вам нужна ошибка, обрабатываемая только вызывающим абонентом метода (даже если ошибка распространяется только до предыдущего вызывающего абонента. Ответ с уведомлениями является лучшим выбором, если вам нужно уведомить несколько объектов о данной ошибке, а не только вызывающей стороне метода, который дал ошибку. – rmaddy

0

Вы можете использовать NSNotificationCenter размещать и получать NSNotification с для различных состояний ошибки.

В serviceproxybase Вы отправите уведомление для любых заинтересованных наблюдателей:

[[NSNotificationCenter defaultCenter] postNotificationName:@"NoConnectionNotification" object:nil userInfo:someErrorInfoObject]; 

Обычно вы бы упаковать объект в someErrorInfoObject, что дает некоторые дополнительные детали к наблюдателю, такой как NSError объект, запрос на обслуживание это не удалось, или код ошибки службы. В контроллере представления вы бы слушать это уведомление в viewDidLoad или viewWillAppear:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(handleNoConnectionError:) 
              name:@"NoConnectionNotification" 
              object:nil]; 

Теперь, когда уведомление с именем NoConnectionNotification размещен контроллер зрения получит сообщение для handleNoConnectionError: с соответствующим NSNotification.

+0

спасибо за ответных парней. Я сейчас запутался в выборе своей реализации.оба варианта кажутся мне логичными. каковы факторы, влияющие на мое решение? – joblot

+0

Спасибо jszumski. У меня есть сценарий, когда мне нужно передать сообщение нескольким объектам, и это действительно пригодится. Спасибо, что поделились своей мудростью. – joblot

Смежные вопросы