关于 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

似乎 initlocationManager 是自动执行的...我不太确定这个...

另一个问题在第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 的问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS:是不是可以要求核心位置框架仅使用蜂窝塔或仅使用 WiFi 或使用 GPS 天线获取位置?

核心定位和辅助 GPS iPhone

如何通过核心位置获取当前位置或 GPS 坐标?

在 iPhone 的 GPS 上获取错误的位置

libgdx:请求 GPS 地理位置?

如何计算交叉跟踪误差(GPS/核心位置)