Я использую диаграммы для своего проекта. Однако теперь я сталкиваюсь с проблемой: если набор данных пуст, я все буду сообщать об ошибке, когда вижу область отладки.

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

Сообщение об ошибке я получаю 25x:

[32865: 1852701] [Неизвестное имя процесса] CGAffineTransformInvert: сингулярная матрица.

На данный момент у меня есть это решение, но я не знаю, есть ли лучшее.

var gewichtenHond: [GewichtHond] = [] {
    didSet {
        if self.gewichtenHond.count == 0 {
            self.lineChartView.noDataText = "Geen data beschikbaar om een grafiek te tekenen."
        } else {
            grafiekData(animatieSnelheid: 1.0, typeAnimatie: .easeInBounce)
        }
        tableView.reloadData()
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    getGewichtenHond()
}

func getGewichtenHond() {
    let appDelegate = UIApplication.shared.delegate as? AppDelegate
    let context = appDelegate?.persistentContainer.viewContext

    let hondFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Hond")
    hondFetch.predicate = NSPredicate(format: "hondId = %@", hondId)

    let honden = try! context?.fetch(hondFetch)
    let hond: Hond = honden?.first as! Hond
    self.gewichtenHond = hond.gewichten?.allObjects as! [GewichtHond]
}
1
Wouter 14 Окт 2018 в 21:14

1 ответ

Лучший ответ

на данный момент у меня есть это решение, но я не знаю, есть ли лучшее.

Я вижу из вашего кода, что вы пытаетесь получить данные каждый раз, когда открываете сцену, если да, попробуйте этот подход

class UIViewController : UIViewController{

var gewichtenHond: [GewichtHond] = [] {
    didSet {
        grafiekData(animatieSnelheid: 1.0, typeAnimatie: .easeInBounce)
        tableView.reloadData()
    }

}

override func viewDidLoad() {
    super.viewDidLoad()
    let appDelegate = UIApplication.shared.delegate as? AppDelegate
    let context = appDelegate?.persistentContainer.viewContext
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.lineChartView.noDataText = "Geen data beschikbaar om een grafiek te tekenen."
    getGewichtenHond()

}
func getGewichtenHond() {
    let hondFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Hond")
    hondFetch.predicate = NSPredicate(format: "hondId = %@", hondId)

    let honden = try! context?.fetch(hondFetch)
    let hond: Hond = honden?.first as! Hond
    self.gewichtenHond = hond.gewichten?.allObjects as! [GewichtHond]

}

}

Если вы просто пытаетесь получить их только один раз, когда открываете сцену, я предлагаю переместить эти две строки

self.lineChartView.noDataText = "Geen data beschikbaar om een grafiek te tekenen."
    getGewichtenHond() 

Внутри метода viewDidLoad, потому что viewWillAppear срабатывает каждый раз, когда вы покидаете сцену и возвращаетесь к ней

1
Mohmmad S 14 Окт 2018 в 21:18