Scripting Bridge генерирует ошибку при создании нового плейлиста в iTunes на 10.5, но не на 10.6 - PullRequest
0 голосов
/ 13 апреля 2010

У меня проблема с каркасом Scripting Bridge в 10.5. В частности, я использую этот код для создания нового плейлиста пользователя в iTunes:

NSDictionary *propertiesDict = [NSDictionary dictionaryWithObject:@"playlistName" forKey:@"name"];
playlistToReturn = (iTunesUserPlaylist*)[[[iTunesApp classForScriptingClass:@"user playlist"] alloc] initWithProperties:propertiesDict];
SBElementArray *sourcesArray = [iTunesApp sources];
iTunesSource *librarySource = [sourcesArray objectAtIndex:0];
SBElementArray *userPlaylistsArray = [librarySource userPlaylists];
[userPlaylistsArray addObject:playlistToReturn];

Этот код отлично работает в 10.6. Плейлист создан правильно, и я могу добавить в него песни позже.

Однако на 10.5 выдается ошибка:

Apple event:'core'\'crel'{
'kocl':'cUsP',
'insh':'insl'{
              'kobj':'obj '{
                            'want':'cUsP',
                            'from':'obj '{
                                          'want':'cSrc',
                                          'from':'null'(),
                                          'form':'ID  ',
                                          'seld':42 },
                            'form':'indx',
                            'seld':'abso'($206C6C61$) },
              'kpos':'end ' },
'prdt':{
              'pnam':'utxt'("playlistName") }
};

Error Domain=SBError Code=-10014 UserInfo=0x152c8cb0 "Operation could not be completed. (SBError error -10014.)"

Почему?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2010

У меня есть приложение, которое делает это и работает на 10.5. Единственное отличие, которое я вижу между вашим кодом и моим, - это последняя строка. Я использую следующее ...

[userPlaylistsArray insertObject: playlistToReturn atIndex: 0];

Дай попробовать ...

0 голосов
/ 13 апреля 2010

Питер: Спасибо за вашу ссылку, этого было достаточно, чтобы я начал искать другое решение.

Поскольку 10.5, очевидно, не очень хорошо справляется с созданием объектов, я изменил способ создания пустого списка воспроизведения. Вместо этого я создаю объект XML для пустого списка воспроизведения, а затем использую команду add: to: Scripting Bridge, которая успешно добавляет список воспроизведения. Затем я использую Scripting Bridge для поиска вновь созданного плейлиста. Вот соответствующий код:

    NSDictionary *innerDictionary = [NSDictionary dictionaryWithObject:playlistName forKey:@"Name"];
    NSArray *innerArray = [NSArray arrayWithObject:innerDictionary];
    NSDictionary *outerDictionary = [NSDictionary dictionaryWithObject:innerArray forKey:@"Playlists"];

    [outerDictionary writeToFile:pathToWriteXMLFile atomically:YES];
    [iTunesApp add:[NSArray arrayWithObject:[NSURL fileURLWithPath:pathToWriteXMLFile]] to:nil];

Это успешно создает плейлист на 10.5. Затем для фактического получения объекта iTunesUserPlaylist *:

    SBElementArray *playlistArray = [[[iTunesApp sources] objectAtIndex:0] userPlaylists];
    NSPredicate *playlistPredicate = [NSPredicate predicateWithFormat:@"name == %@",playlistName];
    NSArray *playlistSearchArray = [playlistArray filteredArrayUsingPredicate:playlistPredicate];

Обратите внимание, что вы можете быть еще более строгим, просматривая playlistSearchArray и проверяя, пуст ли плейлист - поскольку это недавно созданный плейлист, именно тот, который вам нужен.

...