NSPopupButton w widoku NSTableView: pobieranie powiązań do pracy
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.authorJeś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łemKtoś 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?