0

10.5のScriptingBridgeフレームワークに問題があります。具体的には、このコードを使用して、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.)"

なんで?

4

2 に答える 2

0

Peter: リンクをありがとう。別の解決策を探すきっかけになりました。

10.5 は明らかにオブジェクトの作成をうまく処理できないため、空のプレイリストを作成する方法を変更しました。代わりに、空の再生リスト用の XML オブジェクトを作成し、Scripting Bridge の add:to: コマンドを使用して、再生リストを正常に追加します。次に、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];

プレイリストSearchArrayをループして、プレイリストが空かどうかを確認することで、さらに厳密になる可能性があることに注意してください。これは新しく作成されたプレイリストであるため、必要なものです。

于 2010-04-13T19:02:12.590 に答える
0

これを実行し、10.5 で動作するアプリケーションがあります。あなたのコードと私のコードの唯一の違いは、最後の行です。私は以下を使用しています...

[userPlaylistsArray insertObject:playlistToReturn atIndex:0];

試してみる...

于 2010-04-13T19:02:21.940 に答える