Переключение между конкурирующими модальными контроллерами представления - PullRequest
0 голосов
/ 25 января 2012

Мое приложение имеет три состояния:

  • A) подключено к серверу
  • B) подключено к Wi-Fi, но нет интернета
  • C) нет соединения

Первое состояние - это режим работы приложения по умолчанию, а два других (B & C) представлены как контроллеры модального представления.При различных изменениях достижимости должно появиться правильное модальное представление.

К сожалению, в некоторых случаях B & C пытаются представить одновременно, или B отображается в настоящее время и может находиться в миллисекунде от закрытия,но C уже пытается показать себя.

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

Есть мысли?

Ответы [ 2 ]

1 голос
/ 25 января 2012

Я бы свел отдельные случаи B & C в один контроллер представления, который меняет свое представление в зависимости от того, происходит ли B или C в любой данный момент.Таким образом, они не будут конкурировать, потому что есть только один контроллер вида.

1 голос
/ 25 января 2012

Вы не указываете, в каких случаях B & C могли бы представить себя как, так что первое, что приходит на ум, - это то, что вы могли бы искать другой способ проверить, находитесь ли вы в случае B или C, чтобы вы могли устраняйте неоднозначность лучше.

Говоря о флаге, который вы используете, я думаю, что уродливая часть связана с ожиданием, о котором вы упомянули. Это кажется излишним для меня. Одна альтернатива состоит в том, чтобы вместо того, чтобы позволить второму модальному представлению ожидать сброса флага, вы заставляете первый модальный вид отправлять уведомление, которое наблюдает второй вид. Реализация этого довольно тривиальна, и вы можете найти много примеров в S.O. (например, это ).

...