2013-05-07 66 views
5

我想创建一个帮手类,以轻松获取任何其他类中的电话坐标。我遵循教程,其中UIViewController实施<CLLocationManagerDelegate>,它的工作。我试图在一个简单的NSObject中做同样的事情,但之后我的委托不再被调用。CLLocationManager不调用委托在一个NSObject

这是我的代码:

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 

我打电话通过调用

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

时按下按钮。 init正在工作,因为我可以看到NSLog PSCoordinates init

我发现有同样问题的人的其他主题,但没有答案解决它。

您的帮助将非常感激。

回答

13

使“PS坐标*坐标”在全班同级。它会工作:)

+0

你是老板!非常感谢:) – 2013-05-07 15:08:08

+0

感谢它真的帮助我,但你知道它为什么如此吗? – 2014-01-23 06:32:57

+4

@ h.kishan由于您的项目已启用ARC,并且您正在将变量“坐标”声明为本地。编译器会在发现对象的作用域结束时立即向此实例添加一条释放消息。所以,你的实例已经被释放并且不再存在。所以你的代表不会工作。 当您将变量声明为全局变量时,它将一直存在,直到其父类存在。所以你的委托会被调用。 – 2014-01-24 18:45:08

相关问题