NSPopupButton w widoku NSTableView: pobieranie powiązań do pracy

opis problemu

Próbuję osiągnąć coś, co powinno być proste i dość powszechne: posiadanie powiązań wypełnionych NSPopupButton wewnątrz powiązań wypełnionych NSTableView. Apple opisuje to dla tabeli opartej na komórkach w ich dokumentacjiWdrażanie relacji To-One przy użyciu menu podręcznych i wygląda to tak:

Nie mogę tego zrobić dla tabeli opartej na widoku. Popup „Autor” nie będzie się wypełniał bez względu na to, co zrobię.

Mam dwa kontrolery tablicowe, jeden dla elementów w tabeli (Przedmiotów) i jeden dla autorów (Autorski), oba powiązane z odpowiednimi jednostkami w moim podstawowym modelu danych. Powiązuję NSManagedPopup w mojej komórce w następujący sposób w konstruktorze interfejsu:

Zawartość ->Autorski (Klucz kontrolera:decoratedObjects)Wartości treści ->Autorski (Klucz kontrolera:decoratedObjects, Ścieżka klucza modelu:imię)Wybrany obiekt ->Widok komórki tabeli (Ścieżka klucza modelu:objectValue.author

Jeśli umieściłem popup gdzieś poza tabelą, to działa dobrze (poza oczywiście zaznaczeniem), więc domyślnie konfiguracja powiązań powinna być w porządku.

Rzeczy, które już próbowałem

Ktoś zasugerowałobejście przy użyciu właściwości IBOutlet doAutorski kontroler tablicy, ale to też nie działa.

Wkolejne pytanie SO zasugerowano podklasę NSTableCellView i programowo ustanowiono wymagane połączenia. Próbowałem tego, ale miałem tylko ograniczony sukces.

Jeśli ustawię powiązania w następujący sposób:

- (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;
}

wyskakujące okienko pokazuje listę możliwych autorów, ale bieżąca selekcja zawsze pokazuje się jako „Brak wartości”. Jeśli dodam

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

bieżący wybór jest całkowicie pusty. Jedynym sposobem na wyświetlenie bieżącego wyboru jest ustawienie

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

który przerwie, gdy tylko wybiorę innego autora, ponieważ spróbuje przypisaćNSString* doAuthor* własność.

Jakieś pomysły?

questionAnswers(3)

yourAnswerToTheQuestion