2009-08-01 8 views
1

Ich arbeite an meiner ersten großen Cocoa-App für ein Bachelor-Forschungsprojekt.Mehrere Ansichten und Quellenliste in einer Core Data App

Die Anwendung ist dokumentenbasiert und verwendet Core Data. Eine der Entitäten ist eine abstrakte Entität, Page. Page ist das übergeordnete Element mehrerer Seitentypen: dh PageWithHeaderAndFooter, PageWithTwoColumns, BasicPage usw. Page hat Attribute wie Titel und Autor, die alle Seiten gemeinsam haben. Jede bestimmte Art von Seite hat eine bestimmte Anzahl von Layout-Blöcken (PageWithHeaderAndFooter hat drei: Kopfzeile, Fußzeile, Körper. BasicPage hat eine: Körper. Etc.) Zusätzlich definieren alle Page Unterklassen layoutspezifische Implementierungen bestimmter Methoden. Die andere relevante Entität ist Style, die das visuelle Aussehen einer Page definiert. (Denken Sie an Page s als HTML und Style als CSS.)

Ich möchte meine App eine iTunes/Mail-ähnliche Quellenliste mit Abschnitten haben. (Ein Abschnitt wäre Pages, der andere wäre Styles.) Ich habe eine ziemlich gute Idee, wie man die unterteilte Quellliste (this was a great help) macht.

jedoch nach Stunden Headbanging und fruchtlos googeln, dann ist hier, was ich nicht herausfinden können:

Seiten und in der Quellenliste aufgeführt Styles, und wenn Sie wählen eine von ihnen, alle relevanten Felder für Dieses Objekt erscheint auf der rechten Seite (hauptsächlich NSTextViews, Popup-Menüs usw.).

Ich legte das heraus und machte alle Bindungen in Interface Builder.

Das Problem ist, wenn meine Quellenliste verschiedene Arten von Seiten enthält, wie bekomme ich eine andere Ansicht zur Anzeige auf der rechten Seite abhängig von der Art der Seite ausgewählt? Zum Beispiel, wenn eine ausgewählt ist, möchte ich nur, was Sie oben sehen: die allgemeine Seite Sachen und eine NSTextView, die dem einen Feld body von BasicPage entspricht. Aber wenn ich eine PageWithHeaderAndFooter wähle, möchte ich die allgemeine Seite Zeug plus drei NSTextViews (eine für Kopf-, Körper-und Fußzeile) anzeigen. Wenn ich eine Style ausgewählt habe, möchte ich verschiedene Pop-up-Menüs, Farbvertiefungen usw. anzeigen

Für die Seiten sprechen wir nur über eine oder mehrere NSTextViews, von denen jede einem String-Attribut der jeweiligen Entität entspricht.

Wie würden Sie das tun?

Vielen Dank für Ihre Hilfe!

Antwort

1

Ich habe eine Liste von Elementen, die eine von 3 Arten sind, alle sind jedoch sehr ähnlich.

stelle ich die Entity in die View-Controller, bevor ich sie schieben, dann in viewDidLoad des pushee I überprüfen, welche Art von entity I haben und Layout der Informationen unterschiedlich von verschiedenen nibs Angabe zu laden.

if([[entity entityType] isEqualToString:@"TypeA"]) { 
    [[NSBundle mainBundle] loadNibNamed:@"TypeAView" owner:self options:nil]; 
} else if(...) { ..... 

Das funktioniert ganz gut, für mich.