iOS-графики, что делать с пустым набором данных - PullRequest
0 голосов
/ 14 октября 2018

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

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

получено сообщение об ошибке 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 Ответ

0 голосов
/ 15 октября 2018

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

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

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 будет срабатывать каждый раз, когда вы покидаете сцену и возвращаетесь к ней

...