2

两三天前,Apple 为 iTunes 推出了新的更新:新的迷你播放器、新的播放器时间栏等……我想:“太好了!”。但是我发现了一个新问题,这是我的问题:

很久以前,我iTunes.h通过在控制台应用程序中键入以下行来创建文件

sdef /Applications/iTunes.app | sdp -fh --basename "iTunes"

那是我一直用来从 iTunes 中检索数据的文件ScriptingBridge。但是现在,随着新的更新,呼叫[iTunes playerPosition]在最新版本中不再正常工作,(它仍然与旧版本完美配合)。现在,NSInteger我通过调用得到的playerPosition总是 3(秒,0:03),即使玩家位置不是那个。
所以我想,也许如果我iTunes.h再次生成文件,它会起作用。是的,我是对的!它工作得很好,但现在[iTunes playerPosition]在旧版本上已损坏,输出始终为 0(秒,0:00)。

有没有办法解决这个问题,所以它适用于旧版本和新版本?
谢谢!

注意:如果您更新了 iTunes,请尝试下载Significator for iTunes在 Mac App Store 上查看我在说什么。

4

1 回答 1

4

根据这两个.h文件中的信息,您将不得不注意 iTunes 的版本,以便弄清楚如何解释返回的数据。特别是,您需要检查info.plistiTunes 捆绑包中的内部版本号,并在此基础上使用您使用构建的两个类接口之一sdp。我建议您取出旧文件并拉出类并将其重命名为带有附加版本号的东西,因为您需要在根据您正在使用的 iTunes 版本调用方法之前转换对象指针和。

所以,假设你有ITunesObjectProxyand ITunesObjectProxy_old,你会使用:

double progress;
if (newer)
    progress = [iTunes playerPosition ];
else
    progress = (double)[(ITunesProxyObject_old *)iTunes playerPosition ];

这样,您将确保正确处理 double 和 int。显然,您的对象和类的具体名称可能不同,我将确定 iTunes.app 版本的情况留给您,但这是对Info.plist.

于 2013-05-19T20:50:32.053 回答