2017-02-03 3 views
0

Ich versuche, ein Array zu sortieren (vociMenu: NSSet) innerhalb eines Unternehmens, aber ich habe diesen Fehler:Kerndaten der Bestellung eines Subarray NSSet

'NSInvalidArgumentException', reason: 'to-many key not allowed here' 

dies ist mein Code: ENTITY

extension SezioniMenu { 

    @nonobjc public class func fetchRequest() -> NSFetchRequest<SezioniMenu> { 
     return NSFetchRequest<SezioniMenu>(entityName: "SezioniMenu"); 
    } 

    @NSManaged public var sezione: String? 
    @NSManaged public var language: Language? 
    @NSManaged public var vociMenu: NSSet? <---- /// I MUST ORDER THIS ENTITY 

} 

QUERY

 let fetchRequest: NSFetchRequest<SezioniMenu> = SezioniMenu.fetchRequest() 
           fetchRequest.returnsObjectsAsFaults = false 

     let sortDescriptor = NSSortDescriptor(key: "vociMenu.tipologia", ascending: true) 

     let sortDescriptors = [sortDescriptor] 
     let predicate = NSPredicate(format: "language.code = %@", Singleton.sharedInstance.linguaDispositivo) 

     fetchRequest.predicate = predicate 
     fetchRequest.sortDescriptors = sortDescriptors 
    do { 
       array = try self.managedObjectContext.fetch(fetchRequest) 
    ..... 

Wie kann ich die Entität "vociMenu: NSSet" bestellen?

Danke für Ihre Hilfe

UPDATE

ich es geschafft, meine Situation auf diese Weise zu lösen. Sortieren Sie die Liste direkt in den Delegierten des Tableview auf diese Weise:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell : CustomTableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell 
     ///For each section retrieve the list to order 
     let list = self.listSezioni?[indexPath.section].vociMenu?.allObjects as! [VociMenu] 
     ///I run the sort (sort) of the items 
     var listSort = list.sorted(by: { $0.tipologia! < $1.tipologia! }) 

     cell.labelMenu.text = listSort[indexPath.row].tipologia 
} 
+0

was Art vociMenu.tipologia Feld ist zu sortieren aufsteigend? –

+0

vociMenu.tipologia ist String – Diego

Antwort

0

Ich weiß nicht, was ist Ihre Art des vociMenu.tipologia Feld, aber das Problem kann bei der Verwendung keyPathes sein, statt nur Tasten. Versuchen Sie stattdessen sortDescriptor zu verwenden, erstellt von

public init(key: String?, ascending: Bool, comparator cmptr: @escaping Foundation.Comparator) 

wo Sie explizit Logik für Ihren Vergleich bereitstellen können. Hoffe, das half

0

Ihre fetchRequest wird nicht sortieren die vociMenu NSSet aber das Ergebnis Array von SezioniMenu.

Um einen NSSet sortieren Sie

func sorted(by areInIncreasingOrder: (Self.Iterator.Element, Self.Iterator.Element) -> Bool) -> [Self.Iterator.Element] 

Funktion von NSSet selbst Objekt, in dem Sie das Prädikat definieren sortieren den Satz von Objekt verwenden können.

In Ihrem Fall davon aus, dass vociMenu Attribut wird ein VociMenu Objekt verwaltet:

arbeitet
let sortedVociMenu = self.vociMenu.sorted {return ($0 as! VociMenu).tipologia < ($1 as! VociMenu).tipologia} 

sollte