locationServicesEnabled для iOS 3 и iOS 4 - PullRequest
       2

locationServicesEnabled для iOS 3 и iOS 4

2 голосов
/ 04 октября 2010

locationServicesEnabled изменено со свойства на метод.

Это устарело:

CLLocationManager *manager = [[CLLocationManager alloc] init];
if (manager.locationServicesEnabled == NO) {
     // ...
}

Теперь я должен использовать:

if (![CLLocationManager locationServicesEnabled]) {
    // ...
}

Я хочу поддерживать iOS3 и iOS 4 устройства.Как я могу проверить это на устройствах iOS 3 и избавиться от устаревшего предупреждения?

Ответы [ 3 ]

5 голосов
/ 30 марта 2011

Поскольку свойство locationServicesEnabled просто устарело, оно все еще доступно для использования (в течение неопределенного периода времени). Чтобы динамично справиться с ситуацией, вам нужно предоставить защитное решение. Подобно решению выше, я использовал:

BOOL locationAccessAllowed = NO ;
if( [CLLocationManager instancesRespondToSelector:@selector(locationServicesEnabled)] )
{
    // iOS 3.x and earlier
    locationAccessAllowed = locationManager.locationServicesEnabled ;
}
else if( [CLLocationManager respondsToSelector:@selector(locationServicesEnabled)] )
{
    // iOS 4.x
    locationAccessAllowed = [CLLocationManager locationServicesEnabled] ;
}

Вызов 'instancesRespondToSelector' проверяет, доступно ли свойство по-прежнему, затем я дважды проверяю, что сам класс поддерживает вызов метода (будучи статическим методом, он сообщит YES).

Просто еще один вариант.

2 голосов
/ 04 октября 2010

Отредактировано:

#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_3_1
  #if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_3_2
    if (![CLLocationManager locationServicesEnabled]) {
    // ...
    }
  #else
    CLLocationManager *manager = [[CLLocationManager alloc] init];
    if (manager.locationServicesEnabled == NO) {
       // ...
    }
  #endif
#else
CLLocationManager *manager = [[CLLocationManager alloc] init];
if (manager.locationServicesEnabled == NO) {
     // ...
}
#endif
1 голос
/ 22 октября 2010

Попробуйте:

BOOL locationServicesEnabled;
CLLocationManager locationManager = [CLLocationManager new];
if( [locationManager respondsToSelector:@selector(locationServicesEnabled) ] )
{
    locationServicesEnabled = [locationManager locationServicesEnabled];
}
else
{
    locationServicesEnabled = locationManager.locationServicesEnabled;
}

Как исправить / обойти.

Использование определений компилятора вызовет проблемы при использовании минимальной цели развертывания, чтобы позволить более старым версиям ОС получить доступ к вашему приложению.,

...