Sto provando a creare una classe di supporto per ottenere facilmente le coordinate del telefono in qualsiasi altra classe. Ho seguito un tutorial in cui il UIViewController
ha implementato il <CLLocationManagerDelegate>
e ha funzionato. Ho provato a fare lo stesso in un semplice NSObject
, ma il mio delegato non è stato più chiamato.CLLocationManager che non chiama delegato in un NSObject
Questo è il codice che ho:
PSCoordinates.h
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
@interface PSCoordinates : NSObject <CLLocationManagerDelegate>
@property (nonatomic, retain) CLLocationManager* locationManager;
@end
PSCoordinates.m
#import "PSCoordinates.h"
@implementation PSCoordinates
- (id) init {
self = [super init];
if (self) {
self.locationManager = [[CLLocationManager alloc] init];
if ([CLLocationManager locationServicesEnabled])
{
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = 100.0f;
NSLog(@"PSCoordinates init");
[self.locationManager startUpdatingLocation];
}
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
NSLog(@"Géolocalisation : %@",[newLocation description]);
}
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
{
NSLog(@"Géolocalisation (erreur) : %@",[error description]);
}
@end
sto chiamando chiamando
PSCoordinates * coordinates = [[PSCoordinates alloc] init];
quando premendo un pulsante. L'init sta funzionando come posso vedere l'NSLog PSCoordinates init
.
Ho trovato altri argomenti di persone che hanno lo stesso problema ma nessuna risposta ha risolto.
Il vostro aiuto sarebbe molto apprezzato.
Sei un capo! Grazie mille :) –
Grazie davvero mi aiuti, Ma lo sai Perché è così? –
@ h.kishan Perché ARC è abilitato per il progetto e si dichiara la variabile 'coordinate' come locale. Il compilatore aggiungerà un messaggio di rilascio a questa istanza il momento successivo in cui scoprirà che l'ambito dell'oggetto è finito. Quindi, la tua istanza è già stata rilasciata e non esiste più. Quindi il tuo delegato non funzionerà. Quando si dichiara la variabile come globale, esisterà fino alla sua classe genitrice. Quindi il tuo delegato verrà chiamato. –