我正在开发一个可可应用程序,该程序监视您在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/