我正在开发一个可可应用程序,该程序监视您在iTunes中正在听的内容,并且由于我的目标是Mac OS 10.5和更高版本,因此我决定使用Scripting Bridge

如果我尝试关闭iTunes的时间与我的应用为当前曲目轮询它的时间太近,iTunes将立即重新启动!可靠地防止此行为的唯一方法是先退出我的应用程序,然后退出iTunes。

切换到EyeTunes可以解决问题,但是它是一个相当老的代码库,我希望没有外部库就可以完成此任务。我肯定是做错了什么导致重新启动?

这是一些示例代码;由NSTimer触发,此代码段每隔几秒钟运行一次。

#import "iTunesBridge.h" // auto-generated according to Apple's docs

-(void)updateTrackInfo {
    iTunesApplication *iTunes = [[SBApplication alloc] initWithBundleIdentifier:@"com.apple.iTunes"];
    iTunesTrack *currentTrack = [iTunes currentTrack];
    // inspect currentTrack to determine what's being played...
    [iTunes release];
}


这是Scripting Bridge的已知问题,还是我使用不正确?

最佳答案

这是Scripting Bridge的已知问题,还是我使用不正确?


可能两者都有,尽管文档尚不清楚。

The applicationWithBundleIdentifier: class method将在未运行的情况下启动该应用程序,但文档中并未提及the initWithBundleIdentifier:instance method

最安全的方法是使用NSRunningApplication(或Leaaard兼容的Process Manager)查找正在运行的iTunes进程,选择一个,然后选择target it by its process identifier。如果找不到任何iTunes进程,那么当然不要尝试以iTunes进程为目标(跳过创建过程并与SBApplication对话)。

关于objective-c - ScriptingBridge导致iTunes退出后重新启动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2687954/

10-13 03:59