CLLocationManager委托不起作用

时间:2013-04-13 22:19:16

标签: ios objective-c

我的ViewController中有以下代码:

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}


-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    int desiredHA = 200;
    RemoteDataController *rdc = [[RemoteDataController alloc]init];
    double ha = newLocation.horizontalAccuracy;

    if (ha <= desiredHA)
    {
        [rdc addLoc];
        [self.locationManager stopUpdatingLocation];
        return;
    }
}


-(void)startLogging
{
    if(self.locationManager==nil)
    {
    self.locationManager=[[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.locationManager.desiredAccuracy=kCLLocationAccuracyBest;
    self.locationManager.distanceFilter=kCLDistanceFilterNone;
    }

    if([CLLocationManager locationServicesEnabled])
    {
        NSLog(@"Start Location Tracking");
        [self.locationManager startUpdatingLocation];
    }
}

-(void)addLocResponse
{
    NSLog(@"send checkin response");
    self.silenceTimer = [NSTimer scheduledTimerWithTimeInterval:10 target:self
                         selector:@selector(onTick:) userInfo:nil repeats:NO];
}

-(void)onTick:(NSTimer *)timer
{
    [self startLogging];
}

然后我的RemoteDataController.m文件如下所示:

@implementation RemoteDataController

-(void)addLoc
{
    ViewController *vc = [[ViewController alloc]init];
    [vc addLocResponse];
    NSLog(@"Add Loc");
}

@end

我知道这现在看起来很愚蠢,但我删除了很多细节,所以它并不太复杂。

我的问题是,当我从RemoteDataController类调用addLocResponse时计时器运行,然后再次点击onTick点火startLogging。我可以看到它再次从NSLog运行startLogging,但它不会再次运行locationManager委托。

如果我将所有这些保留在ViewController中,它可以正常工作,但当我尝试前往RemoteDataController并返回时它无法正常工作。

我只想弄清楚我在这里做错了什么。

这是iOS6。

任何帮助都会很棒。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您没有为视图控制器使用正确的初始化程序。另外,在ViewController实例的dealloc方法上放置一个断点。有可能被取消分配(如果你使用的是ARC),因为你没有做任何事情(模态演示或推送)。