Bagaimana cara melakukan permintaan pengambilan untuk mendapatkan jumlah parameter dengan deskripsi ekspresi?

Ini permintaan pengambilan saya:

    let request = NSFetchRequest<Service>()
    let sorter = NSSortDescriptor(key: "date", ascending: true)

    let entity = NSEntityDescription()
    entity.name = "Service"
    request.entity = entity
    request.sortDescriptors = [sorter]
    request.resultType = .dictionaryResultType
    request.predicate = NSPredicate(format: "month.identifier = 201703")

    let exp = NSExpressionDescription()
    exp.expression = NSExpression(forKeyPath: "@sum.duration")
    exp.expressionResultType = .integer64AttributeType
    request.propertiesToFetch = [exp]

    do {
        let result = try NSManagedObjectContext.mr_default().fetch(request) //error is here
        print("+++++ \(result)")
    } catch {
        print(error)
    }

Tapi itu menghasilkan kesalahan:

* Menghentikan aplikasi karena pengecualian 'NSInvalidArgumentException' yang tidak tertangkap, alasan: '* -[__NSArrayM insertObject:atIndex:]: objek tidak boleh nihil'

Mengapa?


person Bartłomiej Semańczyk    schedule 01.07.2017    source sumber


Jawaban (1)


Tetapkan nama untuk NSExpressionDescription. Nama adalah kunci yang akan digunakan dalam kamus untuk nilai yang dikembalikan. Saya telah mengubah tipe hasil untuk permintaan pengambilan agar berfungsi untuk tipe Kamus.

    let request = NSFetchRequest<NSFetchRequestResult>()
    let sorter = NSSortDescriptor(key: "date", ascending: true)

    let entity = NSEntityDescription()
    entity.name = "Service"
    request.entity = entity
    request.sortDescriptors = [sorter]
    request.resultType = .dictionaryResultType
    request.predicate = NSPredicate(format: "month.identifier = 201703")

    let exp = NSExpressionDescription()
    exp.name = "sumOfduration"
    exp.expression = NSExpression(forKeyPath: "@sum.duration")
    exp.expressionResultType = . integer64AttributeType
    request.propertiesToFetch = [exp]

    do {
        let result = try UMUserDBManager.sharedInstance.getThreadManagedObjectContext().fetch(request) //error is here
        print("+++++ \(result)")
    } catch {
        print(error)
    }

}
person pkallu    schedule 01.07.2017