2009-08-03 9 views
1

Ich habe eine UITableView, die zwei verschiedene Entitätstypen anzeigt - jede Zeile könnte entweder EntityA oder EntityB sein. cellForRowAtIndexPath betrachtet den Klassentyp und bestimmt, wie die Zelle erstellt wird.verschiedene Entitätstypen in einem einzelnen fetchedResultsController?

Ich behalte meine Objekte mit Core Data und möchte einen getastedResultsController verwenden, um diese Tabellenansicht wegen der Vorteile der Speicherverwaltung zu verwalten. Ich kann jedoch keinen Weg finden, einen AbrufResultsController zu erstellen, der mehr als einen Entitätstyp abrufen kann. Da der Initiator "herangeseiteterResultsController" eine NSFetchRequest-Anforderung akzeptiert und diese nur die Identifizierung einer einzelnen Entität erlaubt, denke ich nicht, was ich tun möchte.

Angenommen es ist nicht, welche Alternativen habe ich? Könnte ich etwas wie die Vererbung einzelner Tabellen tun, indem ich ein Entitätsmodell erstelle, das die Merkmale meiner beiden Entitäten zusammenführt (sie sind ähnlich)? Dies würde meinen Code komplexer machen und die Typisierung erheblich schwächen, aber der Benutzer würde niemals den Unterschied erkennen.

Alle Vorschläge willkommen.

Danke!

/afb

Antwort

4

Es gibt keine wirkliche Möglichkeit, die 1 Einheit pro NSFetchResultsController mit dieser Klasse zu überwinden.

Wenn Sie jedoch weiterhin die Vorteile der Verwendung dieser Klasse nutzen möchten, die große Datenmengen verarbeitet, können Sie zwei oder mehr NSFetchedResultsControllers erstellen und die Methoden des UITableViewDataSourceProtocol verwenden, um zwischen ihnen zu wechseln. Dies ist besonders einfach, wenn Sie einen Abschnitt für jede Entität verwenden möchten.

1

Sie können dies einfach in einer Abrufanforderung tun. Verwenden Sie einfach Entity-Vererbung. Haben EntityA und EntityB beide Unterklassen einer abstrakten Entität, sagen wir EntityX. Setzen Sie dann die NSEntityDescription für Ihre Abrufanforderung auf EntityX. Nicht sicher, wie Sie Attributschlüssel für bestimmte Unterberechtigungen in Ihrem Prädikat angeben.

Verwandte Themen