提交新应用时,我还可以使用UIAccelerometerDelegate吗?

时间:2012-01-18 11:59:22

标签: iphone objective-c ios ipad

据我所知,自{i} 5起,UIAccelerometerDelegate已被弃用。

我仍然需要提交应用程序,以便ios3.2(iPad的第一个版本)的用户仍然可以使用它。该应用程序仅适用于iPad,但我注意到核心运动库适用于ios4及更高版本......这是否意味着我无法使用已弃用的UIAccelerometerDelegate提交? UIAccelerometerDelegate是否会停止在较新的iOS中运行?

我可以同时使用两者吗,所以ios3.2的用户仍然可以加速,我该如何实现?

感谢任何可以帮助我的人!

1 个答案:

答案 0 :(得分:0)

它可能会在某个时候停止工作,但Apple不会因为使用弃用的API而拒绝应用。

您可以选择在运行时使用哪个API,虽然它比平常更复杂,因为CoreMotion依赖于块,这是iOS 4的新功能。因为块是对象文字(即,它们的创建自然地作为程序的一部分发生流程而不是明确地指示您的命令)您需要发出信号,表示您不介意它们是否存在于链接器中,您可以将-weak-lSystem添加到命令行。

然后您可以使用标准的运行时开关,例如:

if(NSClassFromString(@"CMMotionManager"))
{
    // this device has an implementation of CMMotionManager,
    // so proceed with CoreMotion
}
else
{
    // this device doesn't have an implementation of
    // CMMotionManager, so proceed with UIAccelerometerDelegate
}

NSClassFromString要求运行时返回指定类的Class。如果运行时中不存在命名类,则返回该值或nil。因此,它可以用来查看是否实现了特定的类,比依赖编写有关库版本号的知识以外的更好的解决方案等。