我正在制作一个Cocoa应用程序来监控您在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的已知问题,还是我错误地使用它?
答案 0 :(得分:3)
这是Scripting Bridge的已知问题,还是我错误地使用它?
可能两者都有,虽然文档不清楚。
如果应用程序未运行, The applicationWithBundleIdentifier:
class method将启动该应用程序,但文档中没有说明the initWithBundleIdentifier:
instance method。
最安全的方法是使用NSRunningApplication(或Process Manager兼容Leopard)查找正在运行的iTunes进程,选择一个,然后target it by its process identifier。如果您没有找到任何iTunes进程,那么当然不要尝试定位一个(跳过创建和与SBApplication交谈)。
答案 1 :(得分:1)
听起来应用程序在您发送请求时已经关闭,因此会重新启动。
SBApplication applicationWithBundleIdentifier:
对于声明的应用程序 他们自己有一个动态脚本 接口,这个方法将启动 应用程序,如果它还没有 运行