2010-07-12 3 views
0

Je construis une application qui a besoin de travailler sur plusieurs versions de l'iPhone OS et utilise une précision accrue pour Core Location en iOS4.cible de déploiement DIFFERENTS RESULTANT iPhone: cadre de traitement des constantes

I ont un code qui effectue les opérations suivantes: if ([m_locationManager respondsToSelector:@selector(startMonitoringSignificantLocationChanges)]) { m_locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; } else { m_locationManager.desiredAccuracy = kCLLocationAccuracyBest; }

dans ce cas, kCLLocationAccuracyBestForNavigation est une constante introduite dans iOS 4, et startMonitoringSignificantLocationChanges est un procédé de m_locationManager seulement introduit dans iOS4.

Mon problème est que ce code est défaillant sur un appareil iPhone 3.1.3. Il essaye de lier à kCLLocationAccuracyBestForNavigation, mais il ne peut pas trouver le symbole. Ma question est, comment puis-je lier uniquement à ce symbole dans la version iOS4, mais pas la version iPhone 3.1.3?

Merci, C

Répondre

1

Je cernées la réponse par moi-même. Je vais le mettre ici, afin d'être utile aux autres.

Vous devez créer un lien faible vers l'infrastructure de localisation principale afin que le symbole kCLLocationAccuracyBestForNavigation ne soit pas chargé sur les téléphones qui n'ont pas d'anciennes versions.

Pour spécifier les cadres sont faibles liés, vous devez double-cliquer sur l'application cible et allez dans l'onglet « général » et sélectionnez la mise en relation de la bibliothèque. J'ai simplement mis Core Location sur "Faible" et cela fonctionne sur iPhone 3.1.3.

1

Vous pouvez également tester une constante:

if(&kCLLocationAccuracyBestForNavigation != nil) 
Questions connexes