Frage

Ich versuche, eine Core Data App, in dem machen, wenn Sie einen „Player“ in einem Tableview auswählen und eine Liste aller Mitspieler erscheinen in einem zweiten Tableview, mit einer Spalte für wie oft diese beiden Spieler gespielt haben auf dem gleichen "Team" (eine andere juristische Person).

Das hat mich ganz fest, denn während ich weiß, wie eine Tabelle aus einer normalen Array zu füllen, mit ArrayControllers und Core Data wirklich meine Sicht auf die Situation hat sich vollgestopft.

Wie würden Sie diesen Ansatz?

War es hilfreich?

Lösung

Mit freundlichen Grüßen ist ein Bindungen Problem, nicht ein Core Data Problem. : -)

Sie sollten auf jeden Fall einen Griff bekommen auf Cocoa Bindungen bevor mit Core Data zu tun. Dies wird in der Dokumentation angegeben und ist sehr wahr.

Das Thema Ihrer Frage scheint aus dem Körper zu unterscheiden, so dass ich beide beantworten werde.

Anzeigen der Teammates

Core Data beiseite, übernehmen Sie eine Tabelle haben Instanzen darstellt Player. Spieler haben ein Team. Team hat viele Spieler. Daher ist es gefolgert, dass eine Instanz des Spielers hat „team.players“ (minus selbst) als Mitspieler. Ob Sie Core Data verwenden das Modell oder nicht zu verwalten, ist dies gilt für die Gesamt-Beziehungen.

Wenn Sie lesen und Master Cocoa Bindungen, werden Sie feststellen, dass dies überhaupt nicht schwer ist, eine grundlegende Master / Detail- Setup (mit einem zusätzlichen Array-Controller für den Teil Detail, der Einfachheit halber ). Ihre Master-Array-Controller stellen alle Player-Instanzen, während des Detail-Array-Controller den Teammates darstellen -. Oder die Master-Auswahl der "team.players" (minus selbst)

Der Teammates Array-Controller wird seine Einheit und verwaltete Objektkontext wie gewohnt eingerichtet hat (die Dokumentation sehen). Die „ContentSet“ wird in den „Auswahl“ controller Schlüssel des Master-Array-Controller verbunden sein, mit „team.players“ als Modell Schlüsselpfad.

Der Trick ist der Master-Controller des ausgewählten Players um herauszufiltern Prädikate . Dies kann man mit den Array-Controller tun Filter Prädikat . Vielleicht ein mit einem Format von "self! =% @", Wobei "% @" steht für die Master Auswahl des Array-Controller. Ich werde Prädikate (ein kompliziertes Thema für sich), dich verlassen. Denken Sie daran, sie in Code einstellen ([MyController setFilterPredicate: myPredicate]) oder durch Bindungen mit. Prädikate sind unabhängig von Core Data als auch.

Erste Auswahl

Da der Array-Controller verantwortlich für das Array ist die Tabelle darstellt, dann ist es am besten, die Array-Controller zu fragen, was seine Auswahl ist. Eine Möglichkeit ist, seine -arrangedObjets für die Objekte in seiner -selectedIndexes zu fragen.

NSArray * selectedObjects = [[myArrayController arrangedObjects] objectsAtIndexes:[myArrayController selectedIndexes]];

Sie können es auch für seine -selectedObjects fragen. Es gibt Unterschiede zwischen diesen beiden Ansätzen, die von der Dokumentation (API-Referenz und konzeptioneller docs) beschrieben sind, dass Sie auf jeden Fall verstehen sollten, aber fragt den Controller ist das wichtigste Konzept , und zwar unabhängig davon, ob Sie ein verwenden NSArrayController oder einige benutzerdefinierte Controller, dass entspricht den und Protokolle.

Hinweis: typisiert hastig nach einem sozialen Sake Abend. Nicht auf Fehler überprüft. : -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top