2010-03-15 5 views
6

Angenommen, ich habe eine übergeordnete Entität, von denen jede eine Anzahl von untergeordneten haben. Ich möchte alle Eltern nach ihrer Anzahl an Kindern sortieren lassen. Etwas ähnlich dem folgenden Pseudo-Code:Core-Daten: NSFetchRequest Sortierung nach Anzahl von to-many Beziehung

Gibt es eine Möglichkeit, einen Abruf so mit Stammdaten zu konstruieren? Wenn es keine Möglichkeit gibt, dies zu tun, wird das Sortieren mit sortedArrayUsingSelector: die Vorteile der _PFBatchFaultingArray Batch-Größe verlieren?

Danke, Ben

Antwort

5

Ihre Anfrage funktionieren würde, aber (unter der Annahme children wird bemängelt) Schlüssel-Wert-Methoden auf dem Grundstück children Codierung verwenden würde, was wiederum den Fehler ausgelöst würde (siehe the NSManagedObject docs für eine Liste von Methoden, die Fehler auslösen, und eine Diskussion dieses Verhaltens), damit Sie die Leistungsvorteile von Batching und Fehlern verlieren.

Sie könnten in Erwägung ziehen, ein abgeleitetes Attribut für Ihre übergeordnete Entität beizubehalten (nennen Sie es childrenCount), die die Anzahl der untergeordneten Elemente widerspiegelt, wenn dies für Ihre Situation möglich ist. Es ist nicht die sauberste Lösung, aber wenn Sie es als NSNumber in der übergeordneten Entität behalten, haben Sie Zugriff darauf, auch wenn children fehlerhaft ist, und Sie können direkt danach sortieren.

+1

Der KVC '@ count' würde auf dem' NSSet' ausgeführt, nicht auf den Objekten innerhalb dieses 'NSSet' und verursacht daher keine Fehler. –

+0

Der Fehler wird ausgelöst, da Core Data nicht jedes Objekt einzeln ausgibt - es wird das Set selbst (oder vielmehr eine konkrete Unterklasse von NSSet) fehlerhaft. Siehe http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniqing.html#//apple_ref/doc/uid/TP30001202, unter "Fehlende Begrenzungen der Größe des Objektdiagramms". . – Tim

+3

Sind die Dinge seitdem verändert? iOS 7 löst eine Ausnahme für diese Art der Sortierung aus: *** App beenden wegen nicht abgefangener Ausnahme 'NSInvalidArgumentException', Grund: 'to-many key nicht erlaubt' *** Erster Aufrufstack: – an0

Verwandte Themen