Swift 3 核心数据 - NSExpression forFunction:“sum:”抛出错误(“无法将字典转换为 Day”)
Posted
技术标签:
【中文标题】Swift 3 核心数据 - NSExpression forFunction:“sum:”抛出错误(“无法将字典转换为 Day”)【英文标题】:Swift 3 Core Data - NSExpression forFunction: "sum:" throws error ("could not cast dictionary to Day") 【发布时间】:2016-09-15 22:41:14 【问题描述】:我有日子和任务。一天有很多任务。每个任务都有一个名为“积分”的属性,我想总结当天任务的所有积分。我使用了下面的代码(在 Core Data by tutorials, swift 2 版本中找到)并尝试为 swift 3 修改它(我还添加了一个谓词,但这并不重要)。但是当我运行这段代码时,我得到了这个错误:
无法将“NSKnownKeysDictionary1”(0x10d02d328) 类型的值转换为“MyProject.Day”
我做错了什么?
// sum current day's task points
let sumRequest: NSFetchRequest<Day> = Day.fetchRequest()
sumRequest.resultType = .dictionaryResultType
sumRequest.predicate = NSPredicate(format: "SELF == %@", argumentArray: [Project.Days.current])
let expressionDescription = NSExpressionDescription()
expressionDescription.name = "sumOfPoints"
expressionDescription.expression = NSExpression(forFunction: "sum:", arguments: [NSExpression(forKeyPath: "tasks.points")])
expressionDescription.expressionResultType = .integer16AttributeType
sumRequest.propertiesToFetch = [expressionDescription]
do
let results = try managedObject.fetch(sumRequest) as! [NSDictionary] // Here's the line that causes the error
print("DEN:", results)
catch let error as NSError
print("DEN:", error.localizedDescription)
我认为这与这条线有关:
let sumRequest: NSFetchRequest<Day> = Day.fetchRequest()
在这里,我明确地说结果将是一天(我相信这是 swift 3 中的新功能?)。但我不知道如何才能改变这一点。
谢谢!
【问题讨论】:
【参考方案1】:这解决了我的问题:
let sumRequest: NSFetchRequest<NSFetchRequestResult> = Day.fetchRequest()
我没有将Day
作为NSFetchRequestResult
,而是将NSFetchRequestResult
本身放在那里。现在它正在工作。
我相信,当我将其设置为不同的 resultType
时,返回的不是 [Day]
,所以这就是为什么我需要将其更改为更通用或其他的原因。
【讨论】:
以上是关于Swift 3 核心数据 - NSExpression forFunction:“sum:”抛出错误(“无法将字典转换为 Day”)的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSFetchedResultsController 核心数据重新排序 TableView 单元格 - Swift 3