В моем приложении у меня есть продукты, которые заказаны Основная категория -> Подкатегория -> Элементы в подкатегории -> Специфические данные c Сведения об элементе
Первый экран моего приложения - это представление коллекции с изображениями продукта категории. При нажатии он выдвигается к новому виду коллекции с подкатегориями, который при нажатии показывает вид таблицы с отдельными элементами в указанной подкатегории. Наконец, это табличное представление передает деталь V C, которая является контроллером представления с изображением и именем продукта.
Сначала я попытался структурировать свою базу данных firebase следующим образом:
Cateogiries
Main Category1
id: mainCat1
imageUrl: someUrl
Subcategory1
id: subCat1
imageUrl: someUrl
item1
name: Item 1
id: item1
imageUrl: someUrl
subcategory: items' subcategory
, но быстро столкнулся с проблемами:
мое приложение имеет несколько функций, которые позволяют пользователям go непосредственно из viewController «основных категорий» в детализированный вид элемента c (с использованием либо панели поиска, либо сканирования штрихкода продуктов). Поскольку узел «Элемент» находится так глубоко в узле «Главная категория», я не смог получить его при непосредственном доступе к нему. Поэтому я структурировал свою базу данных следующим образом:
Main Categories
Main Cat1
id: mainCat1
imageUrl: someUrl
name: Main Cat 1
Subcategories
Main Category1
Subcategory1
id: subcat1
imageUrl: someUrl
name: Sub Category1
Items
Subcategory1
item1
id: item1
name: Item 1
imageUrl: someUrl
Чтобы сделать эту работу, я извлекаю правильный узел из firebase в каждом контроллере представления. В первой категории (основные категории) я выбираю всех дочерних элементов узла «Основные категории» и отображаю их имена и изображения. При нажатии на ячейку выбранная категория «перемещается» к следующему v c со следующим кодом:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showSubCat" {
let subCatVc = segue.destination as! SubCategoryCollectionViewController
if let indexPath = self.collectionView?.indexPath(for: sender as! UICollectionViewCell) {
subCatVc.sentData1 = productArray[indexPath.row].name
}
}
}
Таким образом, в следующем v c (sibcat v c ) получает ранее выбранную категорию, поэтому я могу выбрать правильную подкатегорию из узла «Подкатегории» в зависимости от того, что нажал пользователь. То же самое для следующего v c.
Это единственный способ сохранить базу данных, чтобы приложение работало. До сих пор это работало нормально, но кажется излишне громоздким. Кроме того, я хотел бы получить доступ к элементу на основе категории / подкатегории, что я не могу сделать сейчас, поскольку узлы элемента и категории не связаны.