2012-02-27 2 views
1

Я пытаюсь заполнить NSPopUpButton массивом объектов ITunesPlaylist. Я получил привязку NSArrayController к NSPopUpButtonКак связать NSPopUpButton с объектами ITunesPlaylist в MacRuby?

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 пользователя в иерархической форме.

ответ

1

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

Спасибо за помощь. Оказывается, это были мои проблемы: – goofrider

0

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

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

    $ sdef /Applications/iTunes.app | SDP -fh --basename Itunes

  2. ниспадающее меню может быть переплетены в «имя» из arrangedObjects в ArrayController, установив «Модальные Key Path» на «имя» в связывания в XCode IBuilder содержания NSPopUpButton, в но «Raise for Not Application Keys» был проверен по умолчанию, поэтому приложение будет аварийно завершено при запуске, потому что ArrayController был пуст. Я не проверял его и все отлично работает

+1

Для получения дополнительной информации о файле заголовка и документе вы можете прочитать это старое сообщение в блоге: http://merbist.com/2010/01/17/controlling-itunes-with- macruby/ –

+0

На самом деле ваш пост был одним из мест, с которыми я столкнулся, что объясняло требования iTunes.h. Отличный пост! – goofrider

Смежные вопросы