Работа с TableViews и CollectionViews и управление несколькими источниками данных в Swift - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть главный ViewController, MainViewController, который содержит несколько представлений наряду с TableView.

Каждая строка (т. Е. tableViewCell) содержит разный контент из разных источников / просмотров и c. Ряд этих строк в tableView, в свою очередь, содержит CollectionView, называемый SettingsCollectionView. В методе tableView cellForRowAt я инициализирую SettingsCollectionView для этого tableViewCell, а также передаю ему соответствующие данные, которые этот подкласс CollectionView использует в качестве источника данных. Так, например:

tableView строка 0 - содержит обобщенный c контент

tableView строка 1 - settingsCollectionViewA : SettingsCollectionView, а также структура OriginalDataA

tableView строка 2 - содержит обобщенный c контент

tableView строка 3 - settingsCollectionViewB : SettingsCollectionView, а также структуру OriginalDataB

tableView строка 4 - settingsCollectionViewC : SettingsCollectionView а также структура OriginalDataC

tableView строка 5 - содержит обобщенное c содержимое

Когда я инициализирую settingsCollectionViewA с помощью OriginalDataA, у меня есть установщик в этом CollectionView, который затем устанавливает локальные данные в LocalDataA. Это позволяет мне убедиться, что у меня есть оригинал и рабочая копия данных, основанных на изменениях, внесенных пользователем и т. Д. c. Каждый раз, когда я вызываю OriginalDataA переменную из MainViewController, геттер в settingsCollectionViewA выполняет некоторую очистку данных и т.д. c. так что я могу делать то, что я хочу с ним в MainViewController.

Эта часть работает хорошо, за исключением случаев, когда эти ячейки tableView сняты с очереди, когда они появляются снова, я возвращаю исходное состояние для этого tableViewCell и, в свою очередь, collectionView, а не состояние, в котором пользователь оставил его.

Я понимаю, что это потому, что каждый класс SettingsCollectionView работает со своей локальной копией OriginalDataA, OriginalDataB et c. и я ценю, что я могу просто обновить исходные данные , но тогда это создает другие сложности - такие как чистота текущего «автономного» кода, созданного для подкласса SettingsCollectionView, а также сложность исходных и обновленных данных. Вот почему я застрял в лучшем подходе к программированию ...

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

Я не включил код, потому что он содержит много другого контента и функций, которые, я думаю, просто путают концепцию, изложенную выше.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Создайте класс, который содержит каждую из ваших структур данных:

class MyDataModel {
    var dataA: DataA
    var dataB: DataB
    var dataC: DataC
}

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

1 голос
/ 24 февраля 2020

Предположим, у вас есть SettingsCollectionViewA , который показывает originalDataA . CollectionView отображает данные, которые вы предоставляете в методе cellforrowatindex. Ячейки представления коллекции повторно используют память каждый раз. Только видимые ячейки остаются в памяти в любой момент времени. Таким образом, измененные пользователем данные не будут сохранены в явном виде, если вы не измените originalDataA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...