gpt4 book ai didi

objective-c - 新的 iTunes 11.0.3 和 ScriptingBridge 出现问题(特别是 'playerPosition' )

转载 作者:行者123 更新时间:2023-12-03 16:28:43 25 4
gpt4 key购买 nike

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

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

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

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

有什么方法可以解决这个问题,以便它可以在旧版本和新版本上运行吗?
谢谢!

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

最佳答案

根据两个.h中的信息文件时,您必须注意 iTunes 的版本,以便弄清楚如何解释返回的数据。特别是,您需要检查 info.plist 中的内部版本号。在 iTunes bundle 中,并基于此使用您使用 sdp 构建的两个类接口(interface)之一。我建议您取出旧文件并提取该类,并将其重命名为带有附加版本号的名称,因为您需要在根据您正在使用的 iTunes 版本调用该方法之前转换对象指针和。

所以,假设你有 ITunesObjectProxyITunesObjectProxy_old ,你会使用:

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

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

关于objective-c - 新的 iTunes 11.0.3 和 ScriptingBridge 出现问题(特别是 'playerPosition' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16638973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com