问题描述
我正在做这样的事情,但它是按系列而不是根据日期绘制的 我正在绘制 3 个数据属性
func setglucoseChart(dataEntryX forX:[String],dataEntryY forY: [Double],result: [Double],secondLine: [Double],thirdLine: [Double]) {
glucoseLineChartView.noDataText = "You need to provide data for the chart."
var dataEntries:[ChartDataEntry] = []
for i in 0..<result.count{
let dataEntry = ChartDataEntry(x: Double(i),y: Double(result[i]),data: dateArr as AnyObject?)
print(dataEntry)
dataEntries.append(dataEntry)
}
let chartDataSet = LineChartDataSet(entries: dataEntries,label: "General")
chartDataSet.circleRadius = 3
chartDataSet.circleHoleRadius = 2
chartDataSet.circleHoleColor = .white
chartDataSet.setCircleColor(.gray)
chartDataSet.linewidth = 3
chartDataSet.colors = [.gray]
chartDataSet.drawCircleHoleEnabled = true
chartDataSet.drawValuesEnabled = false
var dataEntries2:[ChartDataEntry] = []
for i in 0..<secondLine.count{
// let ind = 0
// for j in 0..<7{
// if startIndex = j
// }
let dataEntry = ChartDataEntry(x: Double(i),y: Double(secondLine[i]),data: dateArr as AnyObject?)
print(dataEntry)
dataEntries2.append(dataEntry)
}
let chartDataSet2 = LineChartDataSet(entries: dataEntries2,label: "Before Meal")
chartDataSet2.circleRadius = 3
chartDataSet2.circleHoleRadius = 2
chartDataSet2.circleHoleColor = .white
chartDataSet2.setCircleColor(.blue)
chartDataSet2.linewidth = 3
chartDataSet2.colors = [.blue]
chartDataSet2.drawCircleHoleEnabled = true
chartDataSet2.drawValuesEnabled = false
var dataEntries3:[ChartDataEntry] = []
for i in 0..<thirdLine.count{
let dataEntry = ChartDataEntry(x: Double(i),y: Double(thirdLine[i]),data: dateArr as AnyObject?)
print(dataEntry)
dataEntries3.append(dataEntry)
}
let chartDataSet3 = LineChartDataSet(entries: dataEntries3,label: "After Meal")
chartDataSet3.circleRadius = 3
chartDataSet3.circleHoleRadius = 2
chartDataSet3.circleHoleColor = .white
chartDataSet3.setCircleColor(.green)
chartDataSet3.linewidth = 3
chartDataSet3.colors = [.green]
chartDataSet3.drawCircleHoleEnabled = true
chartDataSet3.drawValuesEnabled = false
let chartData = LineChartData(dataSets: [chartDataSet2,chartDataSet3,chartDataSet])
let xAxisValue = glucoseLineChartView.xAxis
xAxisValue.valueFormatter = axisFormatDelegate
glucoseLineChartView.leftAxis.axisMaximum = 24
glucoseLineChartView.leftAxis.axisMinimum = 0
glucoseLineChartView.xAxis.labelPosition = .bottom
glucoseLineChartView.rightAxis.enabled = false
let marker = BalloonMarker(color: UIColor(white: 180/255,alpha: 1),font: .systemFont(ofSize: 12),textColor: .white,insets: UIEdgeInsets(top: 8,left: 8,bottom: 20,right: 8))
marker.chartView = glucoseLineChartView
marker.minimumSize = CGSize(width: 80,height: 40)
glucoseLineChartView.marker = marker
glucoseLineChartView.data = chartData
}
我正在像这样快速地将值提取到 coredata 中,但是如果缺少日期而不是它在系列中绘制值
my coredatamodel look like this:
任何帮助将不胜感激,谢谢
func fetchglucose(startDate: String,endDate: String,noOfDays: String){
print("Fetching Data..")
self.avgArr.removeAll()
self.dateArr.removeAll()
self.beforeAvgArr.removeAll()
self.afteravgArr.removeAll()
self.diasAvgArr.removeAll()
do {
let ex = NSExpression(format: "average:(value)")
let ed = NSExpressionDescription()
ed.name = "avgofglucoval"
ed.expression = ex
ed.expressionResultType = .stringAttributeType
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "HMglucose")
request.resultType = .dictionaryResultType
request.propertiesToFetch = ["date",ed]
request.propertiesToGroupBy = ["date"]
let exDia = NSExpression(format: "average:(value)")
let edDia = NSExpressionDescription()
edDia.name = "avgofBefore"
edDia.expression = exDia
edDia.expressionResultType = .stringAttributeType
let request1 = NSFetchRequest<NSFetchRequestResult>(entityName: "HMglucose")
request1.resultType = .dictionaryResultType
request1.propertiesToFetch = ["date",edDia]
request1.propertiesToGroupBy = ["date"]
let exDia1 = NSExpression(format: "average:(value)")
let edDia1 = NSExpressionDescription()
edDia1.name = "avgofAfter"
edDia1.expression = exDia1
edDia1.expressionResultType = .stringAttributeType
let request2 = NSFetchRequest<NSFetchRequestResult>(entityName: "HMglucose")
request2.resultType = .dictionaryResultType
request2.propertiesToFetch = ["date",edDia1]
request2.propertiesToGroupBy = ["date"]
let predicate = nspredicate(format: "(date >= %@) AND (date <= %@)",startDate,endDate)
let predicate1 = nspredicate(format: "(date >= %@) AND (date <= %@) AND (type == %@)",endDate,"Before")
let predicate2 = nspredicate(format: "(date >= %@) AND (date <= %@) AND (type == %@)","After")
request.predicate = predicate
request1.predicate = predicate1
request2.predicate = predicate2
let sectionSortDescriptor = NSSortDescriptor(key: "dt",ascending: false)
let sortDescriptors = [sectionSortDescriptor]
request.sortDescriptors = sortDescriptors
let sectionSortDescriptor1 = NSSortDescriptor(key: "dt",ascending: false)
let sortDescriptors1 = [sectionSortDescriptor1]
request1.sortDescriptors = sortDescriptors1
let sectionSortDescriptor2 = NSSortDescriptor(key: "dt",ascending: false)
let sortDescriptors2 = [sectionSortDescriptor2]
request2.sortDescriptors = sortDescriptors2
var error: Error? = nil
var resultsArray: [Any]? = nil
var resultsArray1: [Any]? = nil
var resultsArray2: [Any]? = nil
do {
resultsArray = try appDelegate.persistentContainer.viewContext.fetch(request)
resultsArray1 = try appDelegate.persistentContainer.viewContext.fetch(request1)
resultsArray2 = try appDelegate.persistentContainer.viewContext.fetch(request2)
print(resultsArray1)
let resultsDict1 = resultsArray as! [[String: Any]]
let resultsDict2 = resultsArray1 as! [[String: Any]]
let resultsDict3 = resultsArray2 as! [[String: Any]]
print(resultsArray)
for i in resultsDict1 {
avgArr.append(i["avgofglucoval"] as! String ?? "")
let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd"
let showDate = inputFormatter.date(from: i["date"] as! String ?? "")
inputFormatter.dateFormat = "d MMM"
let resultString = inputFormatter.string(from: showDate!)
dateArr.append(resultString)
}
for i in resultsDict2 {
diasAvgArr.append(i["avgofBefore"] as! String ?? "")
}
for i in resultsDict3 {
afteravgArr.append(i["avgofAfter"] as! String ?? "")
let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd"
let showDate = inputFormatter.date(from: i["date"] as! String ?? "")
inputFormatter.dateFormat = "d MMM"
let resultString = inputFormatter.string(from: showDate!)
}
} catch let error as NSError {
print("Could not fetch. \(error),\(error.userInfo)")
}
if noOfDays == "7"{
if avgArr.count != 7 {
for i in 0..<((7 - avgArr.count)){
avgArr.append("-5.0")
dateArr.append("")
diasAvgArr.append("-5.0")
afteravgArr.append("-5.0")
}
}
// if diasAvgArr.count != 7 {
// for i in 0..<((7 - diasAvgArr.count)){
// diasAvgArr.append("-5.0")
// dateArr.append("")
// }
// }
// if afteravgArr.count != 7 {
// for i in 0..<((7 - afteravgArr.count)){
// afteravgArr.append("-5.0")
// dateArr.append("")
// }
// }
}else if noOfDays == "14"{
if avgArr.count != 14 {
for i in 0..<((14 - avgArr.count)){
avgArr.append("-5.0")
dateArr.append("")
diasAvgArr.append("-5.0")
afteravgArr.append("-5.0")
}
}
}else if noOfDays == "30"{
if avgArr.count != 30 {
for i in 0..<((30 - avgArr.count)){
avgArr.append("-5.0")
dateArr.append("")
diasAvgArr.append("-5.0")
afteravgArr.append("-5.0")
}
}
}
print(avgArr)
print(diasAvgArr)
print(afteravgArr)
print(dateArr)
setglucoseChart(dataEntryX: dateArr,dataEntryY: unitsSold,result: avgArr.convertTodouble,secondLine: diasAvgArr.convertTodouble,thirdLine: afteravgArr.convertTodouble)
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)