Frage

locationServicesEnabled von einer Eigenschaft auf ein Verfahren geändert.

Dies ist veraltet:

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

Jetzt soll ich verwenden:

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

Ich möchte iOS 3 und iOS 4-Geräte unterstützen. Wie kann ich diese drei Geräte auf iOS überprüfen und die veralteten Warnung loswerden?

War es hilfreich?

Lösung

Versuchen Sie:

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

Als fix / Arbeit um.

den Compiler definiert, können Sie Zeit zu Problemen führen, wenn die minimale Implementierungsziel mit Zugang älteren OS-Versionen für Ihre Anwendung zu ermöglichen.

Andere Tipps

Da die Eigenschaft ‚locationServicesEnabled‘ nur veraltet ist, ist es nach wie vor zur Verfügung (auf unbestimmte Zeit). Um die Situation zu behandeln dynamisch benötigen Sie eine defensive Lösung. Ähnlich wie bei der Lösung oben, habe ich:

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] ;
}

Der Aufruf von ‚instancesRespondToSelector‘ überprüft, ob das Objekt noch verfügbar ist, dann habe ich doppelt prüfen, ob die Klasse selbst den Methodenaufruf unterstützt (wobei eine statische Methode es JA berichten).

Nur eine weitere Option.

Editted:

#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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top