2013-05-07 3 views
5

Ich versuche, eine Hilfsklasse zu erstellen, um die Koordinaten des Telefons in jeder anderen Klasse leicht zu erhalten. Ich habe ein Tutorial verfolgt, in dem die UIViewController die <CLLocationManagerDelegate> implementiert hat und es funktioniert. Ich habe versucht, das gleiche in einem einfachen NSObject zu tun, aber dann wurde mein Delegierter nicht mehr angerufen.CLLocationManager nicht Delegat in einem NSObject aufrufen

Dies ist der Code, den ich habe:

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 

ich es bin Aufruf von

PSCoordinates * coordinates = [[PSCoordinates alloc] init]; 

Aufruf, wenn Drücken einer Taste. Die Init funktioniert, wie ich den NSLog PSCoordinates init sehen kann.

Ich habe andere Themen von Menschen mit dem gleichen Problem gefunden, aber keine der Antworten hat es gelöst.

Ihre Hilfe würde wirklich geschätzt werden.

Antwort

13

Machen Sie "PSCoordinates * coordinates" als global in Ihrer Klasse. Es wird funktionieren :)

+0

Sie sind ein Chef! Vielen Dank :) –

+0

Danke, es hilft mir wirklich, aber weißt du warum es so ist? –

+4

@ h.kishan Da ARC für Ihr Projekt aktiviert ist und Sie die Variable 'coordinates' als lokal deklarieren. Der Compiler fügt dieser Instanz im nächsten Moment eine Freigabenachricht hinzu, wenn der Bereich des Objekts gefunden wurde. Ihre Instanz ist also bereits freigegeben und existiert nicht mehr. Ihr Delegierter wird also nicht arbeiten. Wenn Sie die Variable als global deklarieren, wird sie existieren, bis ihre Elternklasse existiert. So wird Ihr Delegierter angerufen. –