Ho provato a rendere pronto AppProject per iOS 8. Avevo letto un sacco diiOS 8 requestWhenInUseAuthorization no Popup
[_locationManager requestWhenInUseAuthorization];
e l'entrata in plist
NSLocationWhenInUseUsageDescription
Così ho cambiato tutte le linee di codice necessarie.
Funziona bene, ma ora ho copiato di nuovo il mio progetto dalla mia base di iOS 7 per includere nuove funzionalità. Ma quando apporto le modifiche per la Privacy posizione iOS8, la finestra popup non viene più visualizzata.
Il mio codice ha funzionato fino a quando non ho copiato.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>tolle sache </string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>fapporite.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
e qui è la mia chiamata
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
_UserLocation = [[CLLocation alloc]init];
_locationManager = [[CLLocationManager alloc]init]; // initializing locationManager
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyBest; // setting the accuracy
[_locationManager requestWhenInUseAuthorization]; // iOS 8 MUST
[_locationManager startUpdatingLocation]; //requesting location updates
NSLog(@"passed initwithcode");
}
return self;
}
Come posso risolvere questo problema?
Questo era il problema principale per me. Dopo aver aggiunto la descrizione, la finestra di dialogo continuava a spuntare e quindi scompariva immediatamente. Correzione che richiedeva due modifiche: assicurati di richiedere l'autorizzazione in viewWillAppear: o successiva e assicurati di memorizzare un riferimento a CLLocationManager. In caso contrario, verrà deallocato e la finestra di dialogo scompare. – robotspacer
Può anche aggiungerlo in viewDidLoad :, ma è importante mantenere un riferimento a CLLocationManager. – OutOnAWeekend
Quindi (solo per completezza), per mantenere un riferimento, ho usato una proprietà con un forte modificatore: '@property (strong, nonatomic) CLLocationManager * locationManager;' –