Сохранение и использование данных в данных Realm, Swift - PullRequest
1 голос
/ 02 мая 2020

Я пишу заявку на поездку. В приложении есть несколько 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...