0

我添加了 CoreLocation 框架,并不断重读书中的代码,以确保我正确地将其复制下来,但我遇到了一个持续性No visible @interface for 'CLLocation' declares the selector 'setDesiredAccuracy:'错误。

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

@interface WhereamiViewController : UIViewController {
    CLLocation *locationManager;
}

@end

#import "WhereamiViewController.h"

@interface WhereamiViewController ()

@end

@implementation WhereamiViewController

-(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {
        locationManager = [[CLLocation alloc] init
        [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    }
    return self;
}
@end
4

4 回答 4

3

你想要CLLocationManager,没有CLLocation

于 2012-08-12T00:00:24.380 回答
3

我想你想用CLLocationManager...

CLLocationManager *locationManager;
于 2012-08-12T00:00:29.817 回答
2

CLLocationManager声明一个名为-setDesiredAccuracy的选择器,而不是CLLocation

于 2012-08-12T00:00:34.613 回答
0
CLLocation

是一个位置对象,它拥有一个特定的坐标/位置,可以显示在地图视图上。但是,CLLocationManager它是一个管理位置和航向更新的对象。setDesiredAccuracy是您设置位置管理器位置和航向更新准确性的方法。如果您将准确度设置为高,位置管理器将更新您所在位置的非常准确的点,但速度相当慢。(不是真的,但是当您与其他精度进行比较时)。

位置更新它的委托方法:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

要开始更新,您可以首先像您说的那样使用准确性和距离过滤器对其进行自定义。然后开始,只需编写:

[locationManager startUpdatingLocation];

而且,所以我可以猜到你会如何停止更新。

注意:如果您在 ARC 上,请将您的位置管理器设置为实例变量(在 .h 中声明),因为它会非常快速地释放位置管理器,并且让用户决定您的应用是否可以跟踪您的位置的弹出窗口会弹出然后消失不到一秒。当然,您的位置不会更新。

于 2012-08-12T00:12:07.997 回答