1

我偶然发现了CoreLocation框架并实现了 iOS Location Awareness Programming Guide中描述的基本步骤,因为我找不到适用于 OSX 的框架。

// AppDelegate.h

#import <Cocoa/Cocoa.h>
#import <CoreLocation/CoreLocation.h>

@interface AppDelegate : NSObject<NSApplicationDelegate, CLLocationManagerDelegate> {
    CLLocationManager* m_locationManager;
}
@end

实现文件中没有那么多...

// AppDelegate.m

- (void)applicationDidFinishLaunching:(NSNotification*)notification {
    m_locationManager = [[CLLocationManager alloc] init];
    m_locationManager.delegate = self;
    m_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [m_locationManager startUpdatingLocation];
}

#pragma mark - CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    NSLog(@"%@ %@", self.className, NSStringFromSelector(_cmd));
}

- (void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*)oldLocation {
    NSLog(@"%@ %@", self.className, NSStringFromSelector(_cmd));
}

- (void)locationManager:(CLLocationManager*)manager didFailWithError:(NSError*)error {
    NSLog(@"%@ %@", self.className, NSStringFromSelector(_cmd));
}

当我启动应用程序时,我被要求授权位置查找。过了一会儿,同样的问题又出现了。
问题:但是,没有一个委托方法被调用。


顺便说一句:一篇关于苹果和谷歌地图宣布CLGeocoder的有趣文章。

4

2 回答 2

2

使用此委托

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation;
于 2013-06-20T10:21:07.350 回答
0

我能想到两件事:

1)

您的应用程序会在 MacOS 10.6 及更高版本上运行吗?如果是这样,请确保您的项目的“部署目标”设置为 10.6 或更高版本。

2)

在您的“ .h”接口文件中,确保添加<CLLocationManagerDelegate>以表明该对象符合协议。看起来您正试图从您的应用程序委托中执行此操作,因此声明可能类似于:

@interface AppDelegate : NSObject <NSApplicationDelegate, CLLocationManagerDelegate>
于 2012-04-17T15:45:40.667 回答