2017-01-14 2 views
0

Ich habe ein Problem beim Zugriff auf Daten in abgerufenen Ergebnissen von CoreData. Die Daten werden in UITableView präsentiert, und das zeigt gut, ich versuche, eine Option zum Filtern der Daten basierend auf einem Attribut zu implementieren. Dies funktioniert auch gut durch .Zugriff auf Entitätsattributwerte, die von CoreData abgerufen wurden

Die Abrufanforderung wird ordnungsgemäß ausgeführt. Es treten jedoch Probleme auf, wenn versucht wird, Werte aus einem der Attribute der abgerufenen Entität zu extrahieren, um sie zu Gesamtkosten hinzuzufügen.

Der Code für die gefilterten Ergebnisse zu holen:

func attemptFilteredFetch(filter: Array<NSPredicate>) 
{ 
    let filterCriteria: NSCompoundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: filter) 
    let fetchRequest: NSFetchRequest<StoredExpense> = StoredExpense.fetchRequest() 
    let dateSort = NSSortDescriptor(key: "dateOfExpense", ascending: false) 
    fetchRequest.sortDescriptors = [dateSort] 
    fetchRequest.predicate = filterCriteria 

    let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil) 
    controller.delegate = self 
    self.controller = controller 

    do 
    {    
     try controller.performFetch()    
    } 
    catch 
    { 
     let error = error as NSError 
     print("\(error)") 
    } 
    expenseList.reloadData() 
} 

So habe ich eine Methode weit habe ich versucht, online gefunden here und ähnliche gefunden, aber die App stürzt ab, wenn die attemptFilteredFetch() Funktion aufgerufen wird.

Ich könnte dies in die falsche Richtung gehen, aber ich erwarte, dass ich die Abrufanforderung in ein Array hinzufügen und durchlaufen kann, um den Gesamtwert zu erhalten.

Gibt es einen besseren Weg? Oder gibt es eine Möglichkeit, auf den Wert des Attributs während des Betriebs zuzugreifen?

+1

Welche Art von Fehler zeigt es? Haben Sie auch das Modell geändert? Möglicherweise müssen Sie die Lichtmigration aktivieren. – CryingHippo

+0

Ich habe es herausgefunden. Es scheint, dass die manuelle Generierung von NSManagedObject Subclass zu einem Mehrdeutigkeitsfehler führt. Ich habe das manuell erstellte Modell entfernt und das Problem wurde behoben. – boywithaxe

Antwort

0

Das Problem wurde dadurch verursacht, dass das Modell von einer älteren Version von Xcode geerbt wurde. AFAIK in Beta Builds, um CoreData verwenden zu können NSManagedObject Subclasses müssen manuell erstellt worden sein. Da dies jetzt in der endgültigen Version von Xcode überflüssig zu sein scheint, hat das manuell erstellte Modell zufällige Fehler ausgelöst. Das Entfernen und das Aufräumen des Codes löste die Probleme, die ich hatte.

Verwandte Themen