2011-03-21 20 views
7

Sto creando un'app su iphone sdk4.0.In che ha fatto l'aggiornamento del metodo di localizzazione mai chiamato. Ho dato il mio codice qui sotto.Si prega di aiutare.Grazie in anticipo.Metodo didUpdateLocation mai chiamato

-(id)init 
{ 
    [super init]; 

    obj=[[UIApplication sharedApplication]delegate]; 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    //locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m 
    [locationManager startUpdatingLocation]; 

    return self; 

} 

-(void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"%f",newLocation.coordinate.latitude); 

    NSLog(@"%f",newLocation.coordinate.longitude); 

    obj=[[UIApplication sharedApplication]delegate]; 

    location=[[CLLocation alloc]initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude]; 
    obj.lattitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.latitude]; 

    obj.longitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.longitude]; 
    //location=[[CLLocation alloc]initWithLatitude:39.9883 longitude:-75.262227]; 
} 
+0

finalmente ha funzionato ... non ho fatto niente.ho appena fatto un nuovo progetto e copiato tutte le classi in esso.non so come? Ma ha funzionato .. –

risposta

5

HI, i tuoi codici sembrano ok. ora questi possono essere i possibili motivi:

sul proprio init: provare a verificare se c'è locationServicesEnabled oppure no.

locationManager = [[CLLocationManager alloc] init]; 
if(locationManager.locationServicesEnabled == NO){ 
    //Your location service is not enabled, Settings>Location Services 
} 

altro motivo, potresti non consentire di ottenere la posizione nella tua app. Soluzione : rimuovi semplicemente la tua applicazione da iPhone e ricostruisci, ora dovrebbe aprire la finestra di dialogo Consenti posizione.

uso questo per verificare l'errore

- (void)locationManager:(CLLocationManager *)manager 
     didFailWithError:(NSError *)error 
{  
    NSLog(@"Error while getting core location : %@",[error localizedFailureReason]); 
    if ([error code] == kCLErrorDenied) { 
     //you had denied 
    } 
    [manager stopUpdatingLocation]; 
} 

altrimenti tutto sembra ok, eri già in esecuzione iOS 4.0, che possono essere installare in iPhone 3G e più tardi, se fosse iPhone 2G, quindi questo problema può si verificano.

+1

ho aggiunto questo alla mia app .. funziona gr8 ... –

1

-locationManager:didFailWithError: nel tuo delegato viene mai chiamato? Forse a un certo punto hai negato l'accesso ai dati sulla posizione e ora non ti viene richiesto, ma l'accesso viene negato.

0

Dopo aver alloc e init il responsabile della posizione, verificare se sono consentiti i servizi di localizzazione. Questo codice è da "LocateMe" esempio di codice di Apple

if (locationManager.locationServicesEnabled == NO) { 
    UIAlertView *servicesDisabledAlert = [[UIAlertView alloc] initWithTitle:@"Location Services Disabled" message:@"You currently have all location services for this device disabled. If you proceed, you will be asked to confirm whether location services should be reenabled." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [servicesDisabledAlert show]; 
    [servicesDisabledAlert release]; 
} 

Se stai test con il simulatore, provare il test con un dispositivo, invece. Il simulatore richiede che il Wi-Fi del computer sia acceso e che possa individuare una stazione base WiFi che si trova nel suo database di posizioni note.

3

Se si verifica questo sul simulatore non funzionerà.

Ciò accade perché tale metodo viene chiamato solo quando il dispositivo cambia posizione (e il simulatore non cambia mai posizione).

+0

No..non sto controllando sul simulatore .. lo sto verificando sul dispositivo iphone –

+0

Hai provato a chiamare manualmente la posizione corrente e assicurandoti di avere una posizione valida? Puoi farlo usando locationManager.location. – Zebs

+7

Questo non è vero, è possibile simulare il movimento ora. 'Simulatore -> Debug -> Location' – Peres

5

Assicurarsi di aver aggiunto CLLocationManager come proprietà.

@property (nonatomic, strong) CLLocationManager * locationManager;

+1

Gabriel mi hai mostrato il modo giusto.Ho trovato la soluzione ora.Ho provato a chiamare il metodo didupdateLocation ma non ho chiamato anche se ho applicato tutto tranne il tuo suggerimento.Finalmente ho applicato CLLocationManager come proprietà. Ora viene chiamato il metodo delegate e ottengo il valore dell'ubicazione di aggiornamento (Lat, long). – user3182143

+0

Grazie mille fratello – user3182143

+0

Potresti dirmi il motivo o la spiegazione sulla proprietà CLLocationManager e perché non funziona senza propert? – user3182143

18

Inoltre in iOS 8 è necessario disporre di due cose in più:

  • aggiungere una chiave al vostro Info.plist e richiesta di autorizzazione da parte del direttore posizione chiedendogli di iniziare.

    • NSLocationWhenInUseUsageDescription

    • NSLocationAlwaysUsageDescription

  • è necessario richiedere l'autorizzazione per il metodo di posizione corrispondente.

    • [self.locationManager requestWhenInUseAuthorization]

    • [self.locationManager requestAlwaysAuthorization]

Codice esempio:

self.locationManager = [[CLLocationManager alloc] init]; 
self.locationManager.delegate = self; 
// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7. 
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 
    [self.locationManager requestWhenInUseAuthorization]; 
} 
[self.locationManager startUpdatingLocation]; 

Fonte: 0.123.120,062557 millions

+0

... e in generale i metodi _Always_ sono scoraggiati, usa gli altri se non sei sicuro di quello che stai facendo. – bshirley

Problemi correlati