关于 iOS 核心位置 GPS 的问题
Posted
技术标签:
【中文标题】关于 iOS 核心位置 GPS 的问题【英文标题】:issue about iOS Core Location GPS 【发布时间】:2011-10-12 07:32:25 【问题描述】:在初始化一个新类时,该类的哪些方法会自动执行。请看下面的代码:
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.m
- (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
似乎 init 和 locationManager 是自动执行的...我不太确定这个...
另一个问题在第2行,什么
CLController.delegate = self ( delegate is declared as id delegate in CoreLocationController.h )
会
如果您之前遇到过,请提供帮助,欢迎所有 cmets
【问题讨论】:
【参考方案1】:init() 是因为这个而被调用的
CLController = [[CoreLocationController alloc] init];
didUpdateToLocation 之所以被调用是因为这是一个委托回调
[CLController.locMgr startUpdatingLocation];
作为旁注,我注意到您的 init 既不调用 super init 也不返回 self。我猜你为这篇文章删减了它。
【讨论】:
您不是直接调用didUpdateToLocation,因为您调用的是CLLocationManager (locMgr) 的startUpdatingLocation,所以locationmanager 在获得locationFix 时会调用委托方法didUpdateToLocation。阅读this 和developer.apple.com/library/ios/#documentation/CoreLocation/…。另请阅读委托的一般工作原理。以上是关于关于 iOS 核心位置 GPS 的问题的主要内容,如果未能解决你的问题,请参考以下文章