Возможно, что в какой-то момент он перестанет работать, но 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
, если указанный класс не существует во время выполнения. Поэтому его можно использовать, чтобы увидеть, реализованы ли конкретные классы, гораздо лучшее решение, чем полагаться на кодирование вне знаний о номерах версий библиотеки и т. Д.