Отображение данных из нескольких массивов в динамические ячейки таблицы
Есть несколько сущностей CoreData, объекты которых добавляются каждая в свой массив.
Объекты созданы на других экранах и благополучно отображаются каждые в своих таблицах. Задача отобразить их все в общей таблице. И каждое последнее добавление на других экранах должно быть первое в общей таблице... Не знаю, насколько правильно реализовано, поправьте, пожалуйста
import UIKit
import CoreData
class CostsStoryViewController: BackgroundVC, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
let shared = CoreDataManager.shared
var fuelArray: [FuelCarStory] = []
var finesArray: [FinesStory] = []
var serviceArray: [ServiceStory] = []
var otherArray: [OtherCostsStory] = []
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.isNavigationBarHidden = false
tableView.delegate = self
tableView.dataSource = self
let fetchRequestFuel = NSFetchRequest<NSFetchRequestResult>(entityName: "FuelCarStory")
do {
let results = try shared.context.fetch(fetchRequestFuel)
for result in results as! [FuelCarStory] {
fuelArray.append(result)
}
} catch {
print(error.localizedDescription)
}
let fetchRequestFines = NSFetchRequest<NSFetchRequestResult>(entityName: "FinesStory")
do {
let results = try shared.context.fetch(fetchRequestFines)
for result in results as! [FinesStory] {
finesArray.append(result)
}
} catch {
print(error.localizedDescription)
}
let fetchRequestService = NSFetchRequest<NSFetchRequestResult>(entityName: "ServiceStory")
do {
let results = try shared.context.fetch(fetchRequestService)
for result in results as! [ServiceStory] {
serviceArray.append(result)
}
} catch {
print(error.localizedDescription)
}
let fetchRequestOther = NSFetchRequest<NSFetchRequestResult>(entityName: "OtherCostsStory")
do {
let results = try shared.context.fetch(fetchRequestOther)
for result in results as! [OtherCostsStory] {
otherArray.append(result)
}
} catch {
print(error.localizedDescription)
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return ???????????
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
?????????
let cell = tableView.dequeueReusableCell(withIdentifier: "FuelCommonCell", for: indexPath) as! FuelCommonCell
let fuel = fuelArray[indexPath.row]
cell.dateFuelLabel.text = fuel.dateFuelData
cell.typeFuelLabel.text = fuel.typeFuelData
cell.litersFuelLabel.text = fuel.numberOfLitersData
cell.sumFuelLabel.text = fuel.amoutToFuelData
}
}
Ответы (1 шт):
Автор решения: Oleg Soloviev
→ Ссылка
Можно вот так:
var entities: [(String, Int)] = []
override func viewDidLoad() {
super.viewDidLoad()
...
fuelArray.reverse()
finesArray.reverse()
serviceArray.reverse()
otherArray.reverse()
for i in 0 ..< fuelArray.count {
entities.append(("fuel", i))
}
for i in 0 ..< finesArray.count {
entities.append(("fines", i))
}
for i in 0 ..< serviceArray.count {
entities.append(("service", i))
}
for i in 0 ..< otherArray.count {
entities.append(("other", i))
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return entities.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch entities[indexPath.row].0 {
case "fuel":
let fuel = fuelArray[entities[indexPath.row].1]
let cell = tableView.dequeueReusableCell(withIdentifier: "FuelCommonCell", for: indexPath) as! FuelCommonCell
cell.dateFuelLabel.text = fuel.dateFuelData
cell.typeFuelLabel.text = fuel.typeFuelData
cell.litersFuelLabel.text = fuel.numberOfLitersData
cell.sumFuelLabel.text = fuel.amoutToFuelData
return cell
case "fines":
let fines = finesArray[entities[indexPath.row].1]
...
case "service":
let service = serviceArray[entities[indexPath.row].1]
...
case "other":
let other = otherArray[entities[indexPath.row].1]
...
default:
return UITableViewCell()
}
}