NSPopupButton in view-basiertem NSTableView: Bindungen zum Laufen bringen

Problembeschreibung

Ich versuche, etwas zu erreichen, das einfach und recht verbreitet sein sollte: einen mit Bindungen bestückten NSPopupButton in NSTableView-Bindungen. Apple beschreibt dies für eine zellenbasierte Tabelle in der zugehörigen DokumentationImplementieren von Zu-Eins-Beziehungen mithilfe von Popup-Menüs und es sieht so aus:

Ich kann das nicht für eine Ansicht-basierte Tabelle arbeiten. Das Popup "Autor" füllt sich nicht, egal was ich tue.

Ich habe zwei Array-Controller, einen für die Elemente in der Tabelle (Artikel) und eine für die Autoren (Autoren), die beide den jeweiligen Entitäten in meinem Kerndatenmodell zugeordnet sind. Ich binde das NSManagedPopup in meiner Zelle wie folgt im Interface Builder:

Inhalt ->Autoren (Controller-Schlüssel:arrangementObjects)Inhaltswerte ->Autoren (Controller-Schlüssel:arrangementObjects, Modellschlüsselpfad:Name)Ausgewähltes Objekt ->Tabellenzellenansicht (Modellschlüsselpfad:objectValue.author

Wenn ich das Popup irgendwo außerhalb der Tabelle platziere, funktioniert es einwandfrei (mit Ausnahme der Auswahl natürlich), daher sollte das Bindungssetup meiner Meinung nach in Ordnung sein.

Dinge, die ich bereits ausprobiert habe

Jemand schlug einProblemumgehung mithilfe einer IBOutlet-Eigenschaft zumAutoren Array-Controller, aber das scheint auch bei mir nicht zu funktionieren.

Imeine andere SO Frage Es wurde vorgeschlagen, NSTableCellView einer Unterklasse zuzuordnen und die erforderlichen Verbindungen programmgesteuert herzustellen. Ich habe es versucht, hatte aber nur begrenzten Erfolg.

Wenn ich die Bindungen wie folgt einrichte:

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];

    if ([tableColumn.identifier isEqualToString:@"Author") {
        AuthorSelectorCell *authorSelectorCell = (AuthorSelectorCell *)view;
        [authorSelectorCell.popupButton bind:NSContentBinding toObject:self.authors withKeyPath:@"arrangedObjects" options:nil];
        [authorSelectorCell.popupButton bind:NSContentValuesBinding toObject:self.authors withKeyPath:@"arrangedObjects.name" options:nil];
        [authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author" options:nil];
    }

    return view;
}

Das Popup zeigt die Liste der möglichen Autoren an, die aktuelle Auswahl wird jedoch immer als "Kein Wert" angezeigt. Wenn ich hinzufüge

[authorSelectorCell.popupButton bind:NSSelectedValueBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];

Die aktuelle Auswahl ist komplett leer. Die einzige Möglichkeit, die aktuelle Auswahl anzuzeigen, besteht in der Einstellung

[authorSelectorCell.popupButton bind:NSSelectedObjectBinding toObject:view withKeyPath:@"objectValue.author.name" options:nil];

die kaputt geht sobald ich einen anderen autor auswähle da dieser versucht einen zuzuweisenNSString* zu einemAuthor* Eigentum.

Irgendwelche Ideen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage