Как связать NSPopUpButton с объектами ITunesPlaylist в MacRuby?
Я пытаюсь заполнить NSPopUpButton массивом объектов ITunesPlaylist. Я получил привязку NSArrayController к NSPopUpButton
app = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes")
playlists = app.sources.objectWithName("Library").userPlaylists
myArrayController.setContent playlists
Все списки воспроизведения появятся в NSPopUpButton, но все они имеют имена с
<ITunesUserPlaylist:0x4018a5000: iTunesUserPlaylist 0 of iTunes Source "Library" of Application "iTunes" (51822)>
Я хочу связать ITunesPlaylist.name со значением содержимого NSPopUpButton, но я не могу заставить его работать.
Также, похоже, очень мало документации по определениям классов объектов, возвращаемых вызовами API Scripting Bridge (например, ITunesPlaylist, ITunesTrack).
Может кто-нибудь дать мне несколько советов? В конечном итоге я хотел бы создать выпадающее меню, которое отображает плейлист iTunes пользователя в иерархической форме.
2 ответа
Вы уверены, что правильно установили привязки с правильным путем ключа? Вы также загрузили файл bridgesupport? Я проверил класс ITunesUserPlaylist, и он должен соответствовать KVC.
playlists.first.valueForKey('name')
Возвращает правильное имя.
Если вы поделитесь немного большим количеством кода, я мог бы разобраться в проблеме.
Кроме того, вот несколько методов, доступных в вашем списке воспроизведения:
Class: iTunesPlaylist
Properties:
duration (the total length of all songs (in seconds))
name (the name of the playlist)
parent (folder which contains this playlist (if any))
shuffle (play the songs in this playlist in random order?)
size (the total size of all songs (in bytes))
songRepeat (playback repeat mode)
specialKind (special playlist kind)
time (the length of all songs in MM:SS format)
visible (is this playlist visible in the Source list?)
Method: tracks
Returned: SBElementArray
----
Method: moveTo:(SBObject *)to
Returned: void
Move playlist(s) to a new location
----
Method: searchFor:(NSString *)for_ only:(iTunesESrA)only
Returned: iTunesTrack
search a playlist for tracks matching the search string. Identical to entering search text in the Search field in iTunes.
Class: iTunesUserPlaylist
Properties:
shared (is this playlist shared?)
smart (is this a Smart Playlist?)
Method: fileTracks
Returned: SBElementArray
----
Method: URLTracks
Returned: SBElementArray
----
Method: sharedTracks
Returned: SBElementArray
----
Спасибо за вашу помощь. Оказалось, это были мои проблемы:
XCode 4 Interface Builder не распознает тип "iTunesPlaylist" в поле "Имя класса" ArrayController, если я сначала не импортирую "iTunes.h" в проект, который мне пришлось сгенерировать:
$ sdef /Applications/iTunes.app | sdp -fh --basename iTunes
Затем всплывающую кнопку можно привязать к "имени" упорядоченного объекта в ArrayController, установив "Путь к модальной клавише" на "имя" в привязке содержимого NSPopUpButton в XCode IBuilder, но по умолчанию был отмечен "Поднять для ключей не для приложения". поэтому приложение будет аварийно завершать работу при запуске, поскольку ArrayController был пуст. Я снял галочку и все отлично работает