Как перейти к определенному viewController из любого текущего viewController?

Хорошо. Мое приложение зависит от наличия активного подключения к Интернету. Когда его нет, вы можете не использовать его. Первоначально я просто собирался представить пользователю alertView с параметрами «повторить попытку подключения» и «закрыть приложение», но после небольшого исследования я обнаружил, что Apple не одобряет закрытие приложений. Поэтому вместо этого я решил представить alertView с параметрами «повторить попытку подключения» и «подождать», где ожидание приведет вас к относительно скучному viewController, который будет периодически проверять наличие интернет-соединения (раз в 15 секунд или около того). Идея состоит в том, чтобы заставить пользователя выйти из приложения для меня с помощью кнопки «Домой» или возобновить игровой процесс, если подключение к Интернету будет восстановлено.

Однако, как вы можете себе представить, доступ в Интернет может быть в любое время (когда вы находитесь на любом данном контроллере представления). Это означает, что об использовании переходов не может быть и речи, потому что мне пришлось бы делать их глупое количество, и все они переходили бы от каждого viewController к этому одному ждущему viewController.

Есть идеи? Есть ли [self gotoViewControllerWithTitle:@"wait"]; команда, о которой я не знаю?

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

Спасибо заранее, и любая помощь приветствуется :).


person Greg Cawthorne    schedule 01.09.2012    source источник


Ответы (3)


Попросите вашего делегата приложения обнаружить отсутствие Интернета и представить свой модальный контроллер представления "Нет Интернета". Затем, когда Интернет возвращает «dismissModalViewController» и вуаля, ваш предыдущий контроллер представления находится внизу.

person Daniel Broad    schedule 01.09.2012
comment
Хорошо. Это кажется эффективным ответом. Как мне заставить моего делегата приложения выполнять проверку и представление контроллера представления? Я реализовал метод, который проверяет соединение в каждом viewController по отдельности. Буду ли я использовать NSTimer для периодической проверки соединения в делегате приложения? и как мне заставить его представить контроллер представления? Раньше я работал только с 'performSegueWithIdentifier:', и для этого требуется наличие перехода. Есть ли 'presentViewControllerWithIdentifier:'? - person Greg Cawthorne; 01.09.2012
comment
Посмотрите Reachability, чтобы проверить наличие Интернета, вы просто выделяете/инициализируете контроллер представления, а затем [self.rootViewController presentViewController:xxx]. - person Daniel Broad; 01.09.2012
comment
Спасибо. Я импортировал Reachable и следовал выбранному ответу в этой теме: stackoverflow.com/questions/3790957/ Все выглядит хорошо, за исключением желтого треугольника, говорящего о незавершенной реализации. Затем, когда я нажимаю «Выполнить», я получаю десять красных ошибок из файла Reachable.m, говорящих о таких вещах, как ARC запрещает явную отправку сообщения об освобождении», «NSAutoReleasePool недоступен в режиме автоматического подсчета ссылок» и «Приведение указателя C типа «void ': к типу указателя target-c 'Доступность' и т. д. Есть идеи? Может быть, доступные файлы устарели? - person Greg Cawthorne; 02.09.2012

Вы можете подклассировать «UIViewController», чтобы создать свой собственный базовый «UIViewController», чтобы иметь общий метод, который проверяет соединение и при отключении вызывает контроллер модального представления, говорящий, что пользователь потерял соединение. А затем, возможно, даже выскочить на корневой контроллер представления. Затем создайте подкласс этого класса, и тогда каждый контроллер UIView теперь будет иметь необходимую вам функциональность. ООП ФТВ

С другой стороны, иметь программу, которая будет работать только при работающем интернет-соединении, — очень плохая идея. Трудно удержать пользователей привязанными к приложению, когда они будут вынуждены выйти из приложения, когда потеряют связь.

person brianSan    schedule 01.09.2012
comment
Спасибо. Я относительно новичок в Objective-C и ООП. Как мне создать подклассы и т.д.? Ваше решение звучит эффективно, но, к сожалению, я не знаю, как его реализовать. Сначала я попробую решение Дорады, так как это кажется более простым вариантом, но я все равно был бы признателен за более подробное объяснение вашего решения, если бы вы были так любезны, поскольку этот метод кодирования был бы очень полезен для меня. - person Greg Cawthorne; 01.09.2012
comment
Во-вторых, ваш комментарий о плохой идее иметь приложение, которое не имеет функциональности без подключения к Интернету, кажется очень верным. На самом деле я могу работать над реализацией автономного режима с ограниченными возможностями. Однако первоначальный вопрос остается в силе, поскольку это навык, который можно применять во многих различных сценариях. - person Greg Cawthorne; 01.09.2012
comment
Эй, извините за долгое время ответа ... Но для подкласса все, что вам нужно сделать, это ⌘ + N и создать новый класс Objective-C. Затем под Subclass of: введите класс, от которого вы хотите наследоваться. Это может быть любой из классов Foundation/UIKit или он может быть из ваших собственных пользовательских классов. И последнее замечание, будучи относительно новым для obj-c и oop, я бы посоветовал попробовать небольшие проекты и функциональность, прежде чем пытаться сделать полноценное приложение. Скорее всего, это будет не очень эффективное приложение, и ваша репутация разработчика приложений сильно пострадает от этого первого приложения. Сначала изучите свои вещи. - person brianSan; 03.09.2012

Сделайте свой «контроллер представления без подключения» одноэлементным объектом. Затем вы можете получить доступ к этому же экземпляру, используя методы класса (например: [MyNoConnectionViewController shareInstance]).

person Samir    schedule 01.09.2012
comment
Я бы не стал использовать синглтон здесь. Это плохо для повторного использования кода и создает ненужную зависимость. - person Rengers; 01.09.2012