CLLocation可能无法响应setDistanceFilter

时间:2011-08-23 16:15:05

标签: iphone ios core-location

我是iPhone的编程新手,我正在关注this本书。 我坚持第4章,委托和核心位置的例子。

这是我到目前为止编写的代码: WhereamiAppdelegate.h

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

    @interface WhereamiAppDelegate : NSObject <UIApplicationDelegate, CLLocationManagerDelegate> {
        UIWindow *window;
        CLLocation *locationManager;

    }

    @property (nonatomic, retain) IBOutlet UIWindow *window;

    @end

以下是实施文件: 我只包括了我所做的改动。 整个文件为here

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Create location manager.
        locationManager = [[CLLocation alloc] init];
        [locationManager setDelegate:self];
        [locationManager setDistanceFilter:kCLDistanceFilterNone];
        [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
        [locationManager startUpdatingLocation];

    [self.window makeKeyAndVisible];
    return YES;
}

- (void)dealloc
{
    [locationManager setDelegate:nil];
    [_window release];
    [super dealloc];
}

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

- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error
{
    NSLog(@"Couldn't find loaction %@",error);
}

XCode给了我一个警告,说CLLocation可能不会响应setDistanceFilter和其他类似的警告。 我在这里一无所知,我已按照书中的说法排成一行。 我认为我还没有实施必要的协议。 有人可以告诉我我做错了什么以及我该如何继续下去。

2 个答案:

答案 0 :(得分:5)

班级CLLocationCLLocationManager不同。前者代表一个位置,而后者是管理器类,用于处理为应用程序配置位置更新。

答案 1 :(得分:1)

setDistanceFilter:是系统API的未记录部分。它们可能会在未来版本的iOS(任何版本)中毫无预警地更改,并且它们也会使您的应用程序无法进入AppStore,但是如果你对它很好,没问题......如果Apple真的想要隐藏这些东西,他们就不会通过在方法表上进行for循环来找到它。

顺便说一下,CLLocation和CLLocationManager之间的区别与你的情况无关,因为代码实际上运行并做正确的事情,因此,你正在向正确的对象发送正确的消息。