我的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。
任何帮助都会很棒。
提前致谢!
答案 0 :(得分:1)
您没有为视图控制器使用正确的初始化程序。另外,在ViewController实例的dealloc方法上放置一个断点。有可能被取消分配(如果你使用的是ARC),因为你没有做任何事情(模态演示或推送)。