gpt4 book ai didi

ios - Swift iOS 使用数据库中的数据更新图表

转载 作者:行者123 更新时间:2023-11-28 13:27:11 25 4
gpt4 key购买 nike

我目前正在学习如何连接到 SQL 数据库并显示信息。我也试图在构建图表的同时掌握闭包。到目前为止,我可以成功地从数据库中提取数据,然后在 UITableViewController 中显示信息。

我有一个简单的 UIViewController 和一个 UIView 来显示数据。到目前为止,我的问题是所有数据都被拉入闭包内部,但是当我在闭包之外做任何事情时,就没有数据。

 @IBOutlet weak var lineChartView: LineChartView!

var sensorReadings: [SensorReadings] = []

var lineChartEntry = [ChartDataEntry]()

override func viewDidLoad() {
super.viewDidLoad()

let url = URL(string: "replaced with actual URL ")

URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in
guard let data = data, error == nil else { print(error!); return }

if error != nil {
print("Datatask Error: ", error!)
} else {
do {
if let sensorData = try JSONSerialization.jsonObject(with: data, options: []) as? [[String:String]] {
for sData in sensorData {
let dataId = sData["dataid"] ?? ""
let readingTime = sData["readingtime"] ?? ""
let sensorId = sData["sensorid"] ?? ""
let reading = sData["reading"] ?? ""

self.sensorReadings.append(SensorReadings(dataId: dataId, readingTime: readingTime, sensorId: sensorId, reading: reading))
}
}
} catch {
print("Serialization Error ", error)
}
}
}).resume()

// Creates an array of strings to hold reading values
var tempArray: [String] = []

// Loops through the downloadaed data
// Adds each of the readings to tempArray
for reading in self.sensorReadings {
tempArray.append(reading.reading)
}

// Convert String to Double
let doublesArray = tempArray.compactMap(Double.init)

// Chart Information
for i in 0..<doublesArray.count {
let value = ChartDataEntry(x: Double(i), y: doublesArray[i])

self.lineChartEntry.append(value)
}

let line = LineChartDataSet(entries: self.lineChartEntry, label: "Number")
line.colors = [NSUIColor.blue]

let chartData = LineChartData()
chartData.addDataSet(line)

self.lineChartView.data = chartData

self.lineChartView.chartDescription?.text = "Data"

}

首先,我从数据库中获取数据的方向是否正确?那么我如何用这些信息更新图表呢?如何从 URLSession 返回信息?或者有没有一种方法可以像在 `UITableView1 中那样更新图表:

    DispatchQueue.main.async {
self.tableView.reloadData()
}

最佳答案

我在这里看到了问题。问题是在使用 URLSession 调用 api 后,您有代码可以立即更新 viewDidLoad 中的表。您需要等待 api 的响应。尝试以下操作

 @IBOutlet weak var lineChartView: LineChartView!

var sensorReadings: [SensorReadings] = []

var lineChartEntry = [ChartDataEntry]()

override func viewDidLoad() {
super.viewDidLoad()

let url = URL(string: "replaced with actual URL ")

URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in
guard let data = data, error == nil else { print(error!); return }

if error != nil {
print("Datatask Error: ", error!)
} else {
do {
if let sensorData = try JSONSerialization.jsonObject(with: data, options: []) as? [[String:String]] {
for sData in sensorData {
let dataId = sData["dataid"] ?? ""
let readingTime = sData["readingtime"] ?? ""
let sensorId = sData["sensorid"] ?? ""
let reading = sData["reading"] ?? ""

self.sensorReadings.append(SensorReadings(dataId: dataId, readingTime: readingTime, sensorId: sensorId, reading: reading))
self.updateChart()
}
}
} catch {
print("Serialization Error ", error)
}
}
}).resume()
}
fun updateChart()
{
// Creates an array of strings to hold reading values
var tempArray: [String] = []

// Loops through the downloadaed data
// Adds each of the readings to tempArray
for reading in self.sensorReadings {
tempArray.append(reading.reading)
}

// Convert String to Double
let doublesArray = tempArray.compactMap(Double.init)

// Chart Information
for i in 0..<doublesArray.count {
let value = ChartDataEntry(x: Double(i), y: doublesArray[i])

self.lineChartEntry.append(value)
}
let line = LineChartDataSet(entries: self.lineChartEntry, label: "Number")
line.colors = [NSUIColor.blue]
let chartData = LineChartData()
chartData.addDataSet(line)
self.lineChartView.data = chartData
self.lineChartView.chartDescription?.text = "Data" }

让我知道它是否有效。还有一个保留周期。闭包内的用户 [weak self]。

关于ios - Swift iOS 使用数据库中的数据更新图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58157783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com