Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa iTunes脚本无法工作_Cocoa_Macos_Applescript_Itunes - Fatal编程技术网

Cocoa iTunes脚本无法工作

Cocoa iTunes脚本无法工作,cocoa,macos,applescript,itunes,Cocoa,Macos,Applescript,Itunes,以下代码应显示iTunes中的特定曲目: NSString* iTunesPath = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:@"com.apple.iTunes"]; iTunesApplication *iTunes = nil; if ( iTunesPath ) { iTunes = [[SBApplication alloc] initWithURL:[NSURL fileURLW

以下代码应显示iTunes中的特定曲目:

NSString* iTunesPath = [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:@"com.apple.iTunes"];

iTunesApplication *iTunes = nil;
if ( iTunesPath ) {
 iTunes = [[SBApplication alloc] initWithURL:[NSURL fileURLWithPath:iTunesPath]];
 [iTunes setDelegate:self];
}

iTunesSource *librarySource = nil;
NSArray *sources = [iTunes sources];
for (iTunesSource *source in sources) {
 if ([source kind] == iTunesESrcLibrary) {
  librarySource = source;
  break;
 }
}
SBElementArray *libraryPlaylist = [librarySource libraryPlaylists];
iTunesLibraryPlaylist *iTLibPlaylist = nil;
if ([libraryPlaylist count] > 0) {
 iTLibPlaylist = [libraryPlaylist objectAtIndex:0];
}


SBElementArray *fileTracks = [iTLibPlaylist fileTracks];

iTunesFileTrack *track = [fileTracks objectAtIndex:4];
NSLog(@"Try to reveal track: %@ at path :%@",[track description],[[track location] path]);
[track reveal];
输出:

Try to reveal track: <ITunesFileTrack @0x1364ed20: ITunesFileTrack 4 of ITunesLibraryPlaylist 0 of ITunesSource 0 of application "iTunes" (2474)> at path :/Users/...
尝试显示轨迹:在路径:/Users/。。。
但绝对没有发生什么。我做错了什么?
(iTunes版本:9.0.3)

用户界面中不再存在库播放列表;它在模型中,所以它显示在AppleScript中,但试图显示它或其中的任何内容都不会在UI中起任何作用,正如您所看到的。您也可以在AppleScript中复制此内容(
显示源1的库播放列表1的曲目5

解决方案是与音乐播放列表通话,而不是与库中的播放列表通话。“音乐”是AppleScript中的第二个播放列表-
playlist 2
,Cocoa中的
[[librarySource playlists]objectAtIndex:1]


如果您想在播放的任何播放列表中显示播放项目,请使用
显示当前曲目
(应该是
[[iTunes currentTrack]显示]
,尽管我没有测试过它)。

库播放列表在UI中不再存在;它在模型中,所以它显示在AppleScript中,但试图显示它或其中的任何内容都不会在UI中起任何作用,正如您所看到的。您也可以在AppleScript中复制此内容(
显示源1的库播放列表1的曲目5

解决方案是与音乐播放列表通话,而不是与库中的播放列表通话。“音乐”是AppleScript中的第二个播放列表-
playlist 2
,Cocoa中的
[[librarySource playlists]objectAtIndex:1]

如果您想在播放的任何播放列表中显示播放项目,请使用
显示当前曲目
(应该是
[[iTunes currentTrack]显示]
,尽管我还没有测试过它)。

这帮助我解决了一个问题。谢谢

我建议不要使用
[[librarySource playlists]objectAtIndex:1]
来获取播放列表。这感觉太像猜测了。您还应该避免使用
for
循环从脚本桥迭代数组

此示例解决了两个问题:

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
iTunesSource *library = [[[[iTunes sources] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"kind == %i", iTunesESrcLibrary]] objectAtIndex:0];
iTunesLibraryPlaylist *lp = [[[[library playlists] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"specialKind == %i", iTunesESpKMusic]] objectAtIndex:0];
[[library playlists]objectWithName:@“Music”]
也可以,但我不确定这是否取决于语言环境(名称可能会在将来的更新中更改)。

这帮助我解决了一个问题。谢谢

我建议不要使用
[[librarySource playlists]objectAtIndex:1]
来获取播放列表。这感觉太像猜测了。您还应该避免使用
for
循环从脚本桥迭代数组

此示例解决了两个问题:

iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
iTunesSource *library = [[[[iTunes sources] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"kind == %i", iTunesESrcLibrary]] objectAtIndex:0];
iTunesLibraryPlaylist *lp = [[[[library playlists] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"specialKind == %i", iTunesESpKMusic]] objectAtIndex:0];

[[library playlists]objectWithName:@“Music”]
也可以,但我不确定这是否取决于语言环境(名称可能会在将来的更新中更改)。

只需添加Rob McBroom的答案,使用firstObject而不是objectAtIndex:0就更好了。如果查询失败并返回空数组,它将防止出现异常。当您搜索Internet无线电源(种类==iTunesRescRadioTuner)并且在首选项中禁用Internet无线电库时,将发生这种情况

iTunesApplication* iTunesApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
iTunesSource* radioTunerSource = [[[[iTunesApp sources] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"kind == %i", iTunesESrcRadioTuner]] firstObject];

为了补充Rob McBroom的答案,最好使用firstObject而不是objectAtIndex:0。如果查询失败并返回空数组,它将防止出现异常。当您搜索Internet无线电源(种类==iTunesRescRadioTuner)并且在首选项中禁用Internet无线电库时,将发生这种情况

iTunesApplication* iTunesApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
iTunesSource* radioTunerSource = [[[[iTunesApp sources] get] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"kind == %i", iTunesESrcRadioTuner]] firstObject];