1

Я создаю приложение iOS в Swift, у которого есть стартовая страница с 6 кнопками. Каждая из этих кнопок перейдет к контроллеру табличного представления, данные которого управляются с помощью NSFetchedResultsController (приложение использует основные данные). Теперь я вижу, что легко создать 6 UITableViewControllers, но мне интересно, было бы более разумно отправлять каждую кнопку на тот же номер UITableViewController и просто менять данные, загруженные/управляемые, установив какой-то флаг в методе prepareForSegue?6 отдельных UIViewControllers или только один с разными источниками данных, принятыми в segue?

Какая у вас лучшая практика? Кажется сумасшедшим иметь 6 tableViewController, каждый из которых поддерживается собственным NSFetchedResultsController, когда большие части требуемого кода для каждого являются многоразовыми и могут быть подклассифицированы и использованы несколько раз.

ответ

1

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

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

Одна вещь, которую вы хотите избежать является следующий код:

if (viewControllerType == ViewControllerOne) { 
    doSomethingSpecial() 
} else if (viewControllerType == ViewControllerTwo) { 
    doSomethingElseSpecial() 
} ... // and so on 

Когда у вас есть цепочка, как это, вы знаете, что вы упустили возможность subcllass.

+0

Хорошие предложения - состав был тем, что я имел в виду, не знал, что у него есть имя, лучше подходит для MVC, чем забивает все это в tableviewcontroller – SimonBarker

1

Я не знаю, если этот вопрос будет закрыт, как на основе мнений, но вот мои мысли:

Определенно использовать только один контроллер представления и изменил источник данных в prepareforsegue()

Представьте себе 6 различных контроллеры, а затем решили через 6 месяцев, что вы хотите изменить весь интерфейс! Я это сделал. Некрасиво. И в этом и был момент, когда я переконфигурировал все и уменьшил общее количество контроллеров.

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

+0

Часть моего мышления состояла в том, чтобы избежать этого сценария 6 модов UI в будущем, Apple делает так легко просто бросить новые контроллеры, где они действуют как делегаты и источники данных, трудно вырваться из этого шаблона и подумать о возможности повторного использования и избегая копирования кода – SimonBarker

+0

@SimonBarker Абсолютно. И вы также можете рассмотреть возможность создания отдельных ячеек в одном TableViewController и просто обхода того, который вы хотите использовать в то время. – Shades

+0

huh, ok - так это точка повторного использования? Чтобы вы могли выбирать различные типы ячеек на основе того, что происходит в коде? – SimonBarker