是否有用于图表的核心数据示例?我一直在尝试示例项目,但没有成功。我知道在声明数组时如何使用数据,在使用获取的结果时很难。
这是我在图表视图中找到的示例:
var chartLegend = ["11-14", "11-15", "11-16", "11-17", "11-18", "11-19", "11-20"]
var chartData = [70, 80, 76, 88, 90, 69, 74]
func numberOfBarsInBarChartView(barChartView: JBBarChartView!) -> UInt {
return UInt(chartData.count)
}
func barChartView(barChartView: JBBarChartView!, heightForBarViewAtIndex index: UInt) -> CGFloat {
return CGFloat(chartData[Int(index)])
}
func barChartView(barChartView: JBBarChartView!, colorForBarViewAtIndex index: UInt) -> UIColor! {
return (index % 2 == 0) ? UIColor.lightGrayColor() : UIColor.whiteColor()
}
func barChartView(barChartView: JBBarChartView!, didSelectBarAtIndex index: UInt) {
let data = chartData[Int(index)]
let key = chartLegend[Int(index)]
infoLabel.text = "Weather on \(key): \(data)"
}
func didDeselectBarChartView(barChartView: JBBarChartView!) {
infoLabel.text = ""
}
这是我用于获取数据的内容:
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var fetchedResultController: NSFetchedResultsController = NSFetchedResultsController()
func getFetchedResultController() -> NSFetchedResultsController {
fetchedResultController = NSFetchedResultsController(fetchRequest: taskFetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
return fetchedResultController
}
func taskFetchRequest() -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "Entity")
let timeSortDescriptor = NSSortDescriptor(key: "attribute1",
ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
let milesSortDescriptor = NSSortDescriptor(key: "attribute2",
ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
fetchRequest.sortDescriptors = [timeSortDescriptor, milesSortDescriptor]
return fetchRequest
}
这是我能够检索核心数据并将其用于在表中查看的方式。如何使用它在图表中查看?
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var fetchedResultController: NSFetchedResultsController = NSFetchedResultsController()
override func viewDidLoad() {
super.viewDidLoad()
fetchedResultController = getFetchedResultController()
fetchedResultController.delegate = self
do {
try fetchedResultController.performFetch()
} catch _ {
}
}
// MARK:- Retrieve Tasks
func getFetchedResultController() -> NSFetchedResultsController {
fetchedResultController = NSFetchedResultsController(fetchRequest: taskFetchRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
return fetchedResultController
}
func taskFetchRequest() -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "RunTime")
let timeSortDescriptor = NSSortDescriptor(key: "time",
ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
let milesSortDescriptor = NSSortDescriptor(key: "miles",
ascending: true, selector: #selector(NSString.caseInsensitiveCompare(_:)))
fetchRequest.sortDescriptors = [timeSortDescriptor, milesSortDescriptor]
return fetchRequest
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - TableView data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
let numberOfSections = fetchedResultController.sections?.count
return numberOfSections!
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let numberOfRowsInSection = fetchedResultController.sections?[section].numberOfObjects
return numberOfRowsInSection!
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
let runtime = fetchedResultController.objectAtIndexPath(indexPath) as! RunTime
cell.textLabel?.text = runtime.time
cell.detailTextLabel!.text = runtime.miles
return cell
}
// MARK: - TableView Deleteƒ
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
let managedObject:NSManagedObject = fetchedResultController.objectAtIndexPath(indexPath) as! NSManagedObject
managedObjectContext.deleteObject(managedObject)
do {
try managedObjectContext.save()
} catch _ {
}
}
// MARK: - TableView Refresh
func controllerDidChangeContent(controller: NSFetchedResultsController) {
tableView.reloadData()
}
使用iOS 13上的SwiftUI,现在使用@FetchRequest属性包装器应该非常容易。