我正在尝试使用可可脚本桥创建一个新的用户播放列表,但似乎无法让它工作。到目前为止我有:
iTunesApplication *iTunes = [SBApplication
applicationWithBundleIdentifier:@"com.apple.iTunes"];
SBElementArray *iSources = [iTunes sources];
iTunesSource *library = nil;
for (iTunesSource *source in iSources) {
if ([[source name] isEqualToString:@"Library"]) {
library = source;
break;
}
}
// could not find the itunes library
if (!library) {
NSLog(@"Could not connect to the iTunes library");
return;
}
// now look for our playlist
NSString *playlistName = @"new playlist";
SBElementArray *playlists = [library userPlaylists];
iTunesUserPlaylist *playlist = nil;
for (iTunesUserPlaylist *thisList in playlists) {
if ([[thisList name] isEqualToString:playlistName]) {
playlist = thisList;
break;
}
}
// if the playlist was not found, create it
if (!playlist) {
playlist = [[[iTunes classForScriptingClass:@"playlist"] alloc] init];
[playlist setName:playlistName];
[[library userPlaylists] insertObject:playlist atIndex:0];
}
当我尝试为播放列表添加名称时,收到错误消息:
iTunesBridge[630:80f] *** -[SBProxyByClass setName:]: 对象尚未添加到容器中;选择器无法识别
有人能指出我正确的方向吗?
该错误消息告诉您,像播放列表这样的 Scripting Bridge 对象在添加到相关 SBElementArray 之前无法接收消息,因此您在将播放列表添加到数组之前尝试设置播放列表的属性会失败。
最简单的解决方案就是重新排列最后两行代码,如下所示:
// if the playlist was not found, create it
if (!playlist) {
playlist = [[[iTunes classForScriptingClass:@"playlist"] alloc] init];
[[library userPlaylists] insertObject:playlist atIndex:0];
[playlist setName:playlistName];
}
另一种选择是使用initWithProperties:
根据您对另一个答案的评论,这就是您最终所做的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)