我是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和其他类似的警告。 我在这里一无所知,我已按照书中的说法排成一行。 我认为我还没有实施必要的协议。 有人可以告诉我我做错了什么以及我该如何继续下去。
答案 0 :(得分:5)
班级CLLocation
与CLLocationManager
不同。前者代表一个位置,而后者是管理器类,用于处理为应用程序配置位置更新。
答案 1 :(得分:1)
setDistanceFilter:是系统API的未记录部分。它们可能会在未来版本的iOS(任何版本)中毫无预警地更改,并且它们也会使您的应用程序无法进入AppStore,但是如果你对它很好,没问题......如果Apple真的想要隐藏这些东西,他们就不会通过在方法表上进行for循环来找到它。
顺便说一下,CLLocation和CLLocationManager之间的区别与你的情况无关,因为代码实际上运行并做正确的事情,因此,你正在向正确的对象发送正确的消息。