【发布时间】:2015-06-06 09:41:11
【问题描述】:
我正在尝试使用“权重”数组来填充带有以下获取请求的图表。但我收到错误“无法使用 'NSNumber' 类型的参数调用 'init',我不知道为什么。'weights' 数组应该是 UInt16 的数组。
var weights : [Int16] = []
func weightFetchRequest() -> NSFetchRequest {
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let managedContext = appDelegate.managedObjectContext!
let fetchRequest = NSFetchRequest(entityName: "Assessment")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "nsDateOfAssessment", ascending: true)]
var error: NSError?
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as [Assessment]?
if let assessments = fetchedResults {
let weightss = assessments.map { assessment in assessment.weight }
weights = weightss
println(weights)
println(weightss)
}
return fetchRequest
}
func lineChartView(lineChartView: JBLineChartView!, verticalValueForHorizontalIndex horizontalIndex: UInt, atLineIndex lineIndex: UInt) -> CGFloat {
if (lineIndex == 0) {
return CGFloat(weights[Int16(horizontalIndex)] as NSNumber) //Error here
}
return 0
}
【问题讨论】:
-
为什么要将水平索引截断为 Int16,为什么要将权重值转换为 NSNumber? CGFloat 初始化程序不能采用 NSNumber,它应该采用基本数字类型。
-
@MattBridges:实际上 CGFloat 可以用 NSNumber 初始化。但这里没有必要。
标签: ios arrays swift int xcode6