Предположим, у нас есть очень простая сущность в модели Core Data с именем "Entity", у которой есть один атрибут с именем "index" типа "Integer 32". И эта сущность пуста. И мы запускаем этот код:
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 - ниже и выше iOS 13?