Как связать NSPopUpButton с объектами ITunesPlaylist в MacRuby? - PullRequest
1 голос
/ 27 февраля 2012

Я пытаюсь заполнить 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 ]

1 голос
/ 29 февраля 2012

Вы уверены, что правильно установили привязки с правильным путем ключа?Вы также загрузили файл 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
----
0 голосов
/ 02 марта 2012

Спасибо за вашу помощь.Оказалось, что это были мои проблемы:

  1. XCode 4 Interface Builder не распознает тип «iTunesPlaylist» в поле «Имя класса» ArrayController, если я сначала не импортирую «iTunes.h» в проект, который мне нужно было сгенерировать:

    $ sdef /Applications/iTunes.app |sdp -fh --basename iTunes

  2. Затем всплывающую кнопку можно привязать к «имени» организованных объектов в ArrayController, установив «Путь к модальной клавише» в «имя» вПривязка содержимого NSPopUpButton в XCode IBuilder, но по умолчанию была отмечена опция «Поднять для не ключей приложения», поэтому при запуске приложения происходит сбой, поскольку ArrayController был пуст.Я снял галочку и все отлично работает

...