2015-12-09 2 views
0

Это может звучать как дубликат, но мне нужно более глубокое понимание и объяснение моего сценария, пожалуйста.Как использовать общий экземпляр UIViewController в Xcode?

В моем приложении у меня есть один InfoViewController, который представляет информацию при вызове (нажатии) из другого контроллера, например: 1) HomeViewController, 2) FavouriteViewController и 3) DownloadViewController. Все 3 проведено UITabViewController

InfoViewController имеет около 10 кнопок и соответствующих действий. Я использую отдельный синглтон для хранения всех информационных объектов.

Все 3 ViewController (Проводит TabVC) -> Грузы возражают Singleton -> InfoViewController использует, что Present Деталь Info

HomeViewController - Его для новой 'Info', чтобы представить, что меняется каждый день Когда информация присутствует,

пользователь может отметить это как избранный, а затем перечислил (в UITableView) на FavoriteViewController. Пользователь может сохранить его в телефоне для дальнейшего использования, который будет указан (в UITableView) на DownloadViewController.

При выборе ячейки все 3 представляет данные с помощью InfoViewController.

Теперь я хочу представить только один экземпляр InfoViewController, чтобы он был видимым для пользователя. Не все во всех 3 вкладках. В настоящее время я переключу его обратно на главный экран с помощью метода ViewDidDisappear. Это работает только тогда, когда я добавляю InfoViewController в качестве дочернего элемента в основной 3 VC. Не путем толчка.

Теперь моя проблема, я пытался использовать Appdelegate для инициализации объекта SharedInfo

sharedInfo = [InfoViewController alloc]init], но он идет на черный экран. Я должен инициализировать его как

[self.storyboard instantiateViewControllerWithIdentifier:@"InfoViewController"]; 

, но это не допускается в AppDelegate или сделать общий экземпляр на самом InfoViewController.

Как достичь только одного экземпляра, представляемого пользователю одновременно?

+0

Вы считаете, что у вас есть только один, который вы передаете в качестве ссылки на все, что ему нужно. Или создайте контроллер, которому вы отправляете сообщения, где бы вы ни нуждались? Честно, однако, это нарушает, как эти вещи предназначены для строительства. –

ответ

1

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

Два возможных решения:

NSNotification Любой вид, который содержит общие данные при подписке на получение уведомлений при изменении данных. Когда данные обновляются через singleton, он отправляет широковещательную передачу любому, кто слушает обновление данных представления.

View Lifecycle В этом втором методе данные в определенном виде обновляются только тогда, когда пользователь открывает этот вид. Обратите внимание на интерфейс панели вкладок, который вызывается viewDidLoad при первоначальной загрузке представления. НЕ изменяйте свои данные здесь, если они меняются. Вместо этого вы хотите обновлять данные в viewWillAppear, поскольку это вызывается каждый раз, когда вы переходите к этому представлению. В viewWillAppear у вас есть код, который проверяет данные и при необходимости обновляет их.

Есть и другие способы кожи этого кота, но одно из двух выше должно работать на вас.

+0

Упрощение для уведомлений. –

+0

ой, я это понимаю. Я думал использовать метод viewDidDisappear для удаления childVC с каждой вкладки. Благодаря вашему ответу, я получил конформацию, что это единственный способ сделать это. Некоторое время его сбивало с толку решать, куда идти. Еще раз спасибо xdeleon – user3605148

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