2013-02-13 56 views
1

我试图实现一个单独的类来管理我的位置。每当我点击一个按钮时,我都想获得我的位置。CoreLocation经理没有更新位置

gpsFilter.h

#import <Foundation/Foundation.h> 
#import <CoreLocation/CoreLocation.h> 

@interface gpsFilter : NSObject <CLLocationManagerDelegate> 

@property (nonatomic, retain) CLLocationManager *gpsManager; 
@property (nonatomic, retain) NSString * latitude; 
@property (nonatomic, retain) NSString * longitude; 
@end 

gpsFilter.m

#import "gpsFilter.h" 

@implementation gpsFilter 

- (id) init{ 
self = [super init]; 
if(self != nil){ 
    self.gpsManager = [[CLLocationManager alloc] init]; 
    self.gpsManager.delegate = self; 
    [self.gpsManager startUpdatingLocation]; 
    BOOL enable = [CLLocationManager locationServicesEnabled]; 
    NSLog(@"%@", enable? @"Enabled" : @"Not Enabled"); 
} 
return self; 
} 

- (void)gpsManager:(CLLocationManager *) manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ 
NSLog(@"didUpdateToLocation: %@", newLocation); 
CLLocation *currentLocation = newLocation; 
if(currentLocation != nil){ 
    self.latitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude]; 
    self.longitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude]; 
} 
} 

- (void)gpsManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 
{ 
NSLog(@"didFailWithError: %@", error); 
} 
@end 

我正在使用一个单独的类,因为我想在未来添加平滑过滤器。我没有得到任何更新。 NSLog从不被触发。我认为一些变量正在自动释放,但我不确定哪一个。

viewController代码如下。

#import "gpstestViewController.h" 

@interface gpstestViewController(){ 

} 

@end 

@implementation gpstestViewController 


- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
self.location = [[gpsFilter alloc] init]; 
// Do any additional setup after loading the view, typically from a nib. 
} 


- (IBAction)getloca:(id)sender { 
self.latitudeLabel.text = [self.location latitude]; 
self.longitudeLabel.text = [self.location longitude]; 

} 

- (IBAction)getLocation:(id)sender { 
self.latitudeLabel.text = [self.location latitude]; 
self.longitudeLabel.text = [self.location longitude]; 

} 
@end 

我很抱歉,我倾倒了大量的代码,但我是一个新手到iOS编程,我无法找到是什么问题。

编辑:updateLocation委托方法根本没有被调用。

+0

Upvoted,因为原因有点隐藏,你现在有足够的信誉来upvote正确的答案。 – AlexWien 2013-02-13 17:00:20

回答

2

代表方法必须命名为locationManager:didUpdateToLocation:fromLocation:locationManager:didFailWithError:

不能使用自定义方法名称,如gpsManager:didUpdateToLocation:fromLocation:


另请注意,自iOS 6起弃用locationManager:didUpdateToLocation:fromLocation:,应使用locationManager:didUpdateLocations:

+0

啊!谢谢!!有效。 – catchmrbharath 2013-02-13 16:51:00

2

您didUpdateToLocation的签名是错误的: 这是我的代码:

/** Delegate method from the CLLocationManagerDelegate protocol. */ 
- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation  
{ 
    // here do 
} 

而且设置desiredAccuracyCLLocationAccuracyBest

+0

我在Xcode上模拟它。所以这似乎没有问题 – catchmrbharath 2013-02-13 16:40:50

+0

我设置它,但它不工作。更新方法根本没有被调用。 updateLocation中的NSLog消息没有打印。 – catchmrbharath 2013-02-13 16:47:00

+0

发现它,看到更新回答 – AlexWien 2013-02-13 16:50:03