2016-09-19 2 views
1

Я работаю с одним TableViewControllerСоветы - Как моделировать список подробно

Объект, который отображается в TableViewController является Task

struct Task{ 
    var type: String 
    var children = [Task]() 
} 

хранить объекты базы задачи в TaskStore. В TaskStore есть элемент-член, который я использую для отслеживания текущего элемента в TaskStore. По умолчанию pivot равен -1, а TableViewController перечисляет все объекты в TaskStore. Когда пользователь нажимает на строку в TableViewController, я обновляю pivot с выбранной строкой и показываю объекты Task в TaskStore.sharedInstance.get (pivot) .children. Кнопка «Назад» устанавливает поворот на -1 и отображает базовый TaskStore.

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

Есть ли более удобный способ отображения дочерних объектов объекта Task в TaskStore без необходимости создания нового TableViewController?

Спасибо за любые советы

ответ

0

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

Что бы я сделал, следовательно, это отдельная общая иерархическая модель из фактического источника данных таблицы. Источник данных в любой момент должен состоять только из массива Заданий, a [Task].

Проблема затем переходит к поддержанию этого массива. Когда пользователь удаляет строку, вы можете заменить этот массив задач на все, что хотите, и вызвать reloadData. Таким образом, вы поддерживаете прямое соответствие между массивом строк строк и задач. cellForRowAtIndexPath просто запрашивает информацию из этой строки массива Задачи, и все сделано. Простой и понятный.

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

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

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