2011-10-12 29 views
0

当初始化一个新的类,这个类的方法将被自动执行。请看看下面的代码:问题有关iOS的核心位置GPS

CoreLocationDemoViewController.m

- (void)viewDidLoad { 
    NSLog(@"CORE_LOCATION_DEMO_VIEW_CONTROLLER=======>VIEW_DID_LOAD"); 
    [super viewDidLoad]; 

    CLController = [[CoreLocationController alloc] init]; // line 1 
    CLController.delegate = self;       // line 2 
    [CLController.locMgr startUpdatingLocation]; 
} 

CoreLocationController。米

- (id)init { 
    NSLog(@"CORE_LOCATION_CONTROLLER=======>INIT"); 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    NSLog(@"CORE_LOCATION_CONTROLLER=======>DID_UPDATE_TO_LOCATION"); 
} 

从调试,我得到了

2011-10-11 23:44:31.682 CoreLocationDemo[77470:207] CORE_LOCATION_CONTROLLER=======>INIT 
2011-10-11 23:44:31.707 CoreLocationDemo[77470:207] CORE_LOCATION_CONTROLLER=======>DID_UPDATE_TO_LOCATION 

似乎初始化的LocationManager自动执行......我不敢肯定这个...

另一个问题是,在第2行,

CLController.delegate = self (delegate is declared as id delegate in CoreLocationController.h) 

做什么

如果您以前遇到过,请在此提供帮助,并欢迎所有意见

回答

0

的init(),是因为这个

CLController = [[CoreLocationController alloc] init]; 

didUpdateToLocation的叫法,因为这是一个代表回调

[CLController.locMgr startUpdatingLocation]; 

一点题外话叫,我注意到你的初始化既不调用超级初始化也不返回self 。我想你已经削减了这个职位。

+0

是的,我确实修剪了一些线条。谢谢你的评论。我现在比较好.. –

+0

第2行如何... –

+0

由于您正在调用CLLocationManager(locMgr)的startUpdatingLocation,因此您没有直接调用didUpdateToLocation,所以locationmanager在获取locationFix时会调用委托方法didUpdateToLocation 。阅读[this](http://developer.apple.com/library/ios/#DOCUMENTATION/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html)和http://developer.apple.com/library/ios/#文档/ CoreLocation /参考/ CLLocationManagerDelegate_Protocol/CLLocationManagerDelegate/CLLocationManagerDelegate.html。一般阅读委托如何工作。 – Saran