Я пишу заявку на поездку. В приложении есть несколько ViewControllers: Поездка -> День -> Место.
class DayVC: UITableViewController {
var selectedTrip: NewTrip!
var days: Results<NewDay>!
override func viewDidLoad() {
super.viewDidLoad()
self.title = selectedTrip.name
recievedDays()
}
func recievedDays() {
days = self.selectedTrip.days.filter("status = 0")
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return days.isEmpty ? 0 : days.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellDay = tableView.dequeueReusableCell(withIdentifier: "CellDay", for: indexPath) as! CustomDayTVCell
var day: NewDay!
day = days[indexPath.row]
cellDay.dayNameLabel.text = day.name
cellDay.dayDateLabel.text = day.date
return cellDay
}
override func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {
let day = days[indexPath.row]
performSegue(withIdentifier: "showDay", sender: day)
}
@IBAction func unwindSegue(_ segue: UIStoryboardSegue) {
guard let newDayVC = segue.source as? NewDayVC else {return}
newDayVC.saveDay()
tableView.reloadData()
}
}
extension DayVC {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let day = sender as? NewDay {
if segue.identifier == "showDay" {
let navigationVc = segue.destination as? UINavigationController
let newDayVC = navigationVc?.topViewController as? NewDayVC
newDayVC?.currentDay = day
}
}
}
}
И существуют отдельные контроллеры ViewController для создания «NewTrip» / «NewDay» / «NewPlace»
class NewDayVC: UITableViewController {
var currentDay: NewDay?
var selectedTrip: NewTrip?
override func viewDidLoad() {
super.viewDidLoad()
}
func saveDay() {
let newday = NewDay(name: dayName.text!,
date: dayDate.text)
if currentDay != nil {
try! realm.write {
currentDay?.name = dayName.text!
currentDay?.date = dayDate.text!
}
} else {
try! realm.write {
self.selectedTrip?.days.append(newday)
}
}
print (newday)
}
private func setupEditScreen() {
if currentDay != nil {
dayName.text = currentDay!.name
dayDate.text = currentDay!.date
}
}
}
Созданные модели выглядят так:
class NewTrip: Object {
@objc dynamic var name = ""
@objc dynamic var startDate: String?
@objc dynamic var endDate: String?
let days = List<NewDay>()
}
class NewDay: Object {
@objc dynamic var name = ""
@objc dynamic var date: String?
@objc dynamic var status = 0
}
Проблема заключается в сохранении данных при создании «Нового дня». Он не спасает или я его не вижу. Что не так? введите описание изображения здесь
ОБНОВЛЕНИЕ: найдено решение проблемы
Было:
extension DayVC {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// if let day = sender as? NewDay {
// if segue.identifier == "showDay" {
// let navigationVc = segue.destination as? UINavigationController
// let newDayVC = navigationVc?.topViewController as? NewDayVC
// newDayVC?.currentDay = day
// }
// }
Это сейчас:
if segue.identifier == "showDay" {
let navigationVc = segue.destination as? UINavigationController
let newDayVC = navigationVc?.topViewController as? NewDayVC
newDayVC?.selectedTrip = selectedTrip
guard let day = sender as? NewDay else { return }
newDayVC?.currentDay = day
}
}
}