CoreData NSExpression «max:» функция поведения на iOS 13.x - PullRequest
0 голосов
/ 06 ноября 2019

Предположим, у нас есть очень простая сущность в модели 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...