假设我们在Core Data模型中有一个非常简单的实体,名称为“ Entity”,它具有一个名为“ Integer 32”类型的属性“ index”。这个实体是空的。 然后我们运行以下代码:
let context: NSManagedObjectContext = getCoreDataContext()
let maxIndexKeypath = "maxIndex"
let request: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Entity")
request.resultType = NSFetchRequestResultType.dictionaryResultType
let expressionDescription = NSExpressionDescription()
expressionDescription.name = maxIndexKeypath
let keypathExpression = NSExpression(forKeyPath: "index")
expressionDescription.expression = NSExpression(forFunction: "max:", arguments: [keypathExpression])
expressionDescription.expressionResultType = .integer32AttributeType
request.propertiesToFetch = [expressionDescription]
var maxIndex: Int?
do {
let result = try context.fetch(request) as? [[String: Int32]]
print(result?.isEmpty)
print(result)
if let result = try context.fetch(request) as? [[String: Int32]], let maxIndexDict = result.first {
maxIndex = maxIndexDict[maxIndexKeypath]?.int
}
} catch {
fatalError()
}
print(maxIndex)
在 iOS 12.2 上,打印结果为:
Optional(false)
Optional([["maxIndex": 0]])
Optional(0)
在 iOS> = 13(当前为iOS 13.2)上,打印结果为:
Optional(false)
Optional([[:]])
nil
我的问题:这是iOS 13(及更高版本)中在实体为空的情况下计算属性最大值的错误吗?
还有第二个问题:在两种情况下(低于iOS 13和高于iOS 13)计算空实体的最大值的最佳解决方法(如果第一个问题的答案为真)是什么?