2016-11-03 2 views
0

Ich habe sowohl bei Google als auch bei SE nachgesehen und konnte die Antwort auf meine Frage nicht finden. Daher entschuldige ich mich, wenn ich übersehen habe, was eine einfache Lösung sein könnte. Ich bin immer noch grün, also habe ich wahrscheinlich nicht die richtigen Suchbegriffe verwendet. :)KVC-Fehler beim Abrufen der Aggregateigenschaft

Okay, ich fühle mich wie 99% wo ich sein möchte. Ich habe die folgende Klasse Funktion:

class func fetchGroupTotal(_ group: Int, for managedObjectContext: NSManagedObjectContext) -> Double { 
    let fetchRequest: NSFetchRequest<Group> = Group.fetchRequest() 
    let keyPathExpression = NSExpression(forKeyPath: "accounts.balance") 
    let sumExpression = NSExpression(forFunction: "sum:", arguments: [keyPathExpression]) 
    let expressionDescription = NSExpressionDescription() 
    expressionDescription.name = "groupSum" 
    expressionDescription.expression = sumExpression 
    expressionDescription.expressionResultType = .decimalAttributeType 
    fetchRequest.propertiesToFetch = [expressionDescription] 
    fetchRequest.resultType = .dictionaryResultType 

    do { 
     let results = try managedObjectContext.execute(fetchRequest) 
     print("\(results)") 
     return results.value(forKey: "groupSum") as! Double 
    } catch { 
     fatalError("Error fetching SUM: \(error)") 
    } 
} 

Kurz gesagt, ich versuche, ein sum auf der accounts Beziehung zu tun, und das Teil scheint zu funktionieren. Das Problem tritt auf, wenn ich versuche, auf die von mir definierte Eigenschaft groupSum zuzugreifen. Ich erhalte die folgende Fehlermeldung:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: 
'[<NSAsynchronousFetchResult 0x600000288de0> valueForUndefinedKey:]: this class is not 
key value coding-compliant for the key groupSum.' 

Wie gehe ich über meine groupSum aus den Ergebnissen zu bekommen?

Antwort

0

Puh! Das war eine harte Zeit dort, aber nach vielen fehlgeschlagenen Google-Suchen fand ich schließlich found my answer. Sobald ich die Änderung vorgenommen habe, wie ich meine fetchRequest erklärte, konnte ich dann auf meine groupSum Eigenschaft als [NSDictionary] zugreifen.

Für diejenigen, die interessiert sein könnten, hier ist die letzte Version meiner Funktion:

class func fetchTotal(_ group: Int, for managedObjectContext: NSManagedObjectContext) -> Double { 

    // Right here is where the magic happens: 
    let fetchRequest: NSFetchRequest<NSFetchRequestResult> = Group.fetchRequest() 

    let keyPathExpression = NSExpression(forKeyPath: "accounts.balance") 
    let sumExpression = NSExpression(forFunction: "sum:", arguments: [keyPathExpression]) 
    let expressionDescription = NSExpressionDescription() 
    expressionDescription.name = "groupSum" 
    expressionDescription.expression = sumExpression 
    expressionDescription.expressionResultType = .decimalAttributeType 
    fetchRequest.propertiesToFetch = [expressionDescription] 
    fetchRequest.resultType = .dictionaryResultType 
    fetchRequest.returnsDistinctResults = true 

    do { 
     let results = try managedObjectContext.fetch(fetchRequest).first 
     if let result = results as? NSDictionary { 
      return result.value(forKey: "groupSum") as! Double 
     } 
     return 0.00 
    } catch { 
     fatalError("Error fetching SUM: \(error)") 
    } 
} 
Verwandte Themen