2012-09-24 9 views
43

In iOS 6, la proprietà purpose di CLLocationManager, per descrivere il motivo dell'utilizzo dei servizi di posizione (@property(copy, nonatomic) NSString *purpose) è stata dichiarata obsoleta.Sostituzione per proprietà "purpose" di CLLocationManager

Quale sostituzione, se esiste, viene proposta da Apple?

+0

C'è una risposta con un punteggio ≥30; hai considerato di contrassegnarlo come accettato? – bdesham

risposta

62

La sostituzione per la proprietà purpose in iOS 6 è una nuova chiave denominata Info.plist NSLocationUsageDescription (alias "Privacy - Descrizione dell'uso della posizione").

La chiave è documented in the Information Property List Key Reference ma sfortunatamente non è menzionata con la nota di ritiro della proprietà purpose.

Tuttavia, il CLLocationManager.h ha questo commento:

* obsolete. Impostare la stringa di scopo in Info.plist utilizzando la chiave NSLocationUsageDescription.

Nel codice, è possibile impostare sia la chiave e la proprietà purpose (ma si consiglia di controllare se il location manager risponde a tale selettore prima se/quando il metodo viene effettivamente rimosso in futuro).

Se in esecuzione su iOS 6, il responsabile della posizione utilizzerà la chiave.
Quando si utilizza meno di iOS 6, la chiave verrà ignorata e verrà utilizzata la proprietà purpose.

+6

Come si può localizzare esattamente questa stringa? O hai quindi bisogno di un infoplist.strings localizzato solo per questo scopo? (no pun intended) –

+0

@BobdeGraaf localizzato infoplist.strings suona come il modo di andare da qui: http://stackoverflow.com/a/14144989/159758 – DonnaLea

3

Ho appena avuto lo stesso problema nella mia app.

Ho scoperto che ora è possibile impostare l'attività di CLLocationManager! È possibile scegliere diversi CLActivityTypes, quindi non è necessario scrivere più il proprio scopo.

Ecco ad esempio per una navigazione basata App

[self.gps setActivityType:CLActivityTypeAutomotiveNavigation]; 

Altri CLActivityTypes possibili sono:

- CLActivityTypeFitness 
- CLActivityTypeOther 
- CLActivityTypeOtherNavigation 
+0

Cambia ciò che viene visualizzato all'utente? E mi piacerebbe essere più specifico (come era possibile prima con "scopo"), invece di usare semplicemente TypeOther. In attesa di una sostituzione, continuerò a utilizzare il metodo deprecato. – Guillaume

+0

Bene, il messaggio visualizzato all'utente è una specie di messaggio predefinito: "'AppName' vuole usare la tua posizione corrente." Non capisco perché Apple abbia cambiato questo, sono sicuro che gli utenti vorrebbero conoscere i dettagli. .. –

+0

Non dimenticare che ufficialmente deprecato significa essere presto abbandonato, ma la definizione di presto può variare. – Guillaume

Problemi correlati