Перестановки и комбинации двух разных зверей. Смотрите:
>>> from itertools import permutations,combinations
>>> from pprint import pprint
>>> l = ['a', 'b', 'c', 'd']
>>> pprint(list(combinations(l, 2)))
[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
>>> pprint(list(permutations(l)))
[('a', 'b', 'c', 'd'),
('a', 'b', 'd', 'c'),
('a', 'c', 'b', 'd'),
('a', 'c', 'd', 'b'),
('a', 'd', 'b', 'c'),
('a', 'd', 'c', 'b'),
('b', 'a', 'c', 'd'),
('b', 'a', 'd', 'c'),
('b', 'c', 'a', 'd'),
('b', 'c', 'd', 'a'),
('b', 'd', 'a', 'c'),
('b', 'd', 'c', 'a'),
('c', 'a', 'b', 'd'),
('c', 'a', 'd', 'b'),
('c', 'b', 'a', 'd'),
('c', 'b', 'd', 'a'),
('c', 'd', 'a', 'b'),
('c', 'd', 'b', 'a'),
('d', 'a', 'b', 'c'),
('d', 'a', 'c', 'b'),
('d', 'b', 'a', 'c'),
('d', 'b', 'c', 'a'),
('d', 'c', 'a', 'b'),
('d', 'c', 'b', 'a')]
>>>
Ваш контроллер текущего представления должен быть ответственен за диспетчеризацию любого сообщения об ошибке и контакт с результатом.
Последняя часть является ключом здесь. Если Вы встречаетесь с Ошибкой HTTP и передаете сообщение до Вашего делегата приложения с опцией "повторной попытки", ответ затем должен пойти, полностью отступают к контроллеру. Это все получает немного yucky.
Теперь можно хотеть создать общий класс/представление в приложении, которое может иметь дело со всеми ошибками, с которыми Вы, вероятно, встретитесь, но это должно все еще быть представлено (модальным способом) контроллером, который встречается с ошибкой, и именно этот контроллер должен получить делегированные ответы.
Контроллеры могут или, возможно, не должны знать, что была ошибка для надлежащего восстановления с сетевой ошибки, но для разработки iPhone я нашел полезным иметь базовый коммуникационный класс, который понимает весь коммуникационный вход и из системы, и когда она обнаруживает проблемы отказов предупреждение непосредственно. Тем путем можно предотвратить перегрузку уведомлений об отказе, если пользователь переключает вкладки или иначе перемещается приложение, и просто сгенерируйте одно сообщение так, чтобы пользователь мог понять, почему экраны не обновляют.