จะดำเนินการร้องขอการดึงข้อมูลเพื่อรับผลรวมของพารามิเตอร์พร้อมคำอธิบายนิพจน์ได้อย่างไร

นี่คือคำขอดึงข้อมูลของฉัน:

    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)
    }

แต่มันทำให้เกิดข้อผิดพลาด:

* การยกเลิกแอปเนื่องจากข้อยกเว้นที่ไม่ถูกตรวจจับ 'NSInvalidArgumentException' เหตุผล: '* -[__NSArrayM insertObject:atIndex:]: วัตถุไม่สามารถเป็นศูนย์ได้'

ทำไม


person Bartłomiej Semańczyk    schedule 01.07.2017    source แหล่งที่มา


คำตอบ (1)


ตั้งชื่อสำหรับ NSExpressionDescription ชื่อคือคีย์ที่จะใช้ในพจนานุกรมสำหรับค่าที่ส่งคืน ฉันได้เปลี่ยนประเภทผลลัพธ์สำหรับคำขอดึงข้อมูลเพื่อให้ใช้ได้กับประเภทพจนานุกรม

    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