Как сохранить выбор пользователя через серию контроллеров представления? - PullRequest
2 голосов
/ 21 января 2011

Я читаю этот поток в StackOverflow о внедрении зависимостей, и я действительно стремлюсь использовать идеи, которые дает ответ с самым высоким рейтингом.Однако у меня возникают проблемы с тем, чтобы заставить их работать в моем случае, и я везде искал решение, но мне не повезло.

Чтобы проиллюстрировать мою ситуацию в простейших терминах, скажем, у меня есть:

ViewController A - в котором пользователь выбирает фотографию
ViewController B - в котором пользователь затем выбирает цвет
ViewController C - в котором изображение и цвет отображаются обратно пользователю

Я вижу, как использовать инъекцию зависимости, чтобы указать, что ViewController A должен переместить ViewController B в контроллер навигации после выбора фотографии, но где я должен хранить фотографию, которая была выбрана?Как я должен сделать его доступным для отображения в ViewController C?

Кроме того, как я должен сказать ViewController B, что ему нужно нажать ViewController C, когда выбран цвет?

Единственное решение, которое яМожно подумать о том, что строго следует идеям вышеупомянутого потока: иметь свойство 'photo' в ViewController B, которое устанавливается ViewController A, когда оно передает его в контроллер навигации.Но это кажется мне «плохой идеей», потому что в общем случае ViewController B не должен интересоваться фотографиями, поскольку его единственная цель в жизни - выбрать цвет и двигаться дальше.

В попытке решить эту проблему япредложили 2 возможности:

1 / Заставить все ViewControllers отчитываться перед центральным делегатом.

Это, кажется, идет вразрез с тем, что поток внедрения зависимостиговорит, но это все еще кажется самым простым способом.Т.е. ViewController A выбирает фотографию и сообщает об этом делегату.Делегат сохраняет фотографию для дальнейшего использования и передает ViewController B на контроллер навигации.Когда цвет выбирается, он сохраняет его и отправляет ViewController C, передавая ему значения для цвета и фотографии, сохраненные ранее.

2 / Передача какого-либо объекта свойств между контроллерами.

Я мог бы создать объект со свойствами 'color' и 'photo' и передать его ViewController A. Свойство photo было бы установлено в ViewController A, а затем объект был бы передан ViewController B, который установил бысвойство color перед передачей его в ViewController C. Для отображения.

Обе опции кажутся мне «нормальными», но ни одна из них не совсем верна.

Возможно, я полностью неправильно понял внедрение зависимостиВ таком случае, пожалуйста, дайте мне знать!В противном случае любые мысли по поводу вышеперечисленного были бы огромными.

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 21 января 2011

Не думаю, что вам нужна полная цепь A-> B-> C.

A может вызывать B, передавая словарь "выбора" в методе init, а затем может вызывать C, когда он возвращает управление после возврата B. B и C будут знать, что нужно «выбрать (изображение | цвет) и сохранить результаты в словаре выбора».

Тогда в viewDidAppear:, A имеет простой конечный автомат:

  • если изображение не выбрано, нажмите B (сборщик изображений)
  • В противном случае, если цвет не выбран, нажмите C (палитра цветов)
  • иначе отобразить изображение
1 голос
/ 21 января 2011

Вот как я бы это сделал.

Сначала вы начинаете с объекта UINavigationController, который содержит контроллеры представления A, B и C. Сначала нажимается «A», «B», а затем «C»,Поскольку каждый контроллер представления помещается в «стек» контроллеров представления, они все находятся в памяти.Поэтому, когда нажимается «C», «C» должен запрашивать у UINavigationController свойства «A» и «B» (фото и цвет).По сути, UINavigationController - это ваш мост между C и двумя другими контроллерами (A и B).

0 голосов
/ 21 февраля 2011

В случае, если кому-то интересно то же самое, в конце я выбрал вариант 1 / из моего первоначального вопроса.Прекрасно работает, удобен в обслуживании и позволяет мне создавать очень универсальные и многократно используемые ViewControllers.

...