Как связать исходный список в стиле iTunes с NSTableView, используя Core Data? - PullRequest
6 голосов
/ 14 марта 2010

В моем приложении есть интерфейс в стиле iTunes: список источников (NSOutlineView) слева, который содержит различные библиотеки и списки воспроизведения, а в правой части интерфейса - NSTableView, отображающий информацию для «Презентаций». Как и в iTunes, в табличном представлении я показываю информацию того же типа, независимо от того, выбрана ли библиотека или список воспроизведения (название, автор, дата создания и т. Д.).

alt text

В настоящее время у меня есть NSArrayController, подключенный к моему NSTableView, и я устанавливал предикат выборки на основе того, что было выбрано в списке источников. Это прекрасно работает при выборе библиотеки, потому что я могу просто установить предикат выборки для фильтрации по полю «тип» в моей сущности Presentation Core Data. Однако, когда я пытаюсь настроить предикат выборки для списка воспроизведения, не похоже, что существует какой-либо способ установить предикат выборки, потому что у меня есть таблица между списками воспроизведения и презентациями, чтобы соответствовать порядку в списке воспроизведения. Согласно документации Apple, этот тип предикатов не может быть реализован с Core Data (в основном это не несколько внутренних соединений). Ниже приведена соответствующая часть моей модели данных.

alt text

Неправильно ли настроена моя модель данных? Должен ли я оставить NSArrayController и обработать подключение NSTableView вручную? Я пытаюсь выяснить, есть ли простое исправление или действительно недостаток дизайна.

1 Ответ

0 голосов
/ 18 августа 2011

В CoreData есть документация для создания отношений

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html
http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/Articles/cdBindings.html

Но если судить по вашей модели БД, вы делаете это правильно с тремя таблицами:

Presentation с информацией о песне PlaylistItem с one-to-one отношением к презентации Playlist с one-to-many отношением к PlaylistItem

Презентация [ID TITLE URL ALBUM ARTIST ....]
PlaylistItem [ID Presentation_ID Playlist_ID]
Плейлисты [ID Title MoreInfo]

Итак, на языке реализации IB CoreData:

  • Начните с извлечения каждого списка воспроизведения в NSOutlineView в левом столбце
  • При выборе получить идентификатор списка воспроизведения и извлечь все элементы списка воспроизведения на основе фильтрации Playlist_ID
  • PlaylistItem будет иметь объект Presentation внутри для доступа к новой информации о песне

И да, на вашем месте я бы предпочел позаботиться о подключении nstableview вручную

...