情况如下,我正在MacOS 10.7上运行xCode 4.1,启动iPhone模拟器并使用MapKit试图获得REAL用户的坐标...默认用户的位置在Cupertino,美国...拿到这个角度cordinates我使用:在模拟器上获取用户MapKit的_correct_坐标
self.mapView.userLocation.location.coordinate
...但是这让我在地图(在非洲)的中心......
问题1:为什么???为什么用户的pin被设置为Cupertino,但其坐标是(lat:0,lon:0)在非洲?
...然后...
我安装我的控制器作为CCLocationManagerDelegate和MKMapViewdelegate和初始化控制器作为委托CCLocationManagerDelegate的事件......但是这些都委托方法被称为...
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
问题2:为什么委托方法不会被触发甚至一度?
我的控制器:
//@interface MapController : UIViewController<CLLocationManagerDelegate, MKMapViewDelegate>
//@property (nonatomic, retain) MapModel *mapModel;
//@property (nonatomic, retain) IBOutlet MKMapView *mapView;
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{ ... }
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{ ... }
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{ ... }
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapModel = [[[MapModel alloc] init:self] autorelease];
[self.mapView setShowsUserLocation:YES];
[self.mapView setZoomEnabled:YES];
[self.mapView setScrollEnabled:YES];
[self.mapView setMapType:MKMapTypeStandard];
CLLocationCoordinate2D x =
self.mapView.userLocation.location.coordinate; // (0,0) why???
//[self.mapView setRegion:xx animated:YES];
//[self.mapView regionThatFits:self.mapModel.region];
[[self.mapView userLocation] setCoordinate:[x coordinate]];
}
...
和型号:
//@property (nonatomic, copy) NSString *user;
//@property (nonatomic, copy) NSString *caption;
//@property (nonatomic, copy) NSString *description;
//@property (nonatomic, assign) MKCoordinateRegion region;
//@property (nonatomic, retain) CLLocationManager *manager;
- (id)init :(id)delegate
{
self.manager = [[[CLLocationManager alloc] init] autorelease];
self.manager.delegate = delegate;
self.manager.distanceFilter = kCLDistanceFilterNone;
self.manager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[self.manager startUpdatingLocation];
MKCoordinateRegion region = {{0, 0}, {0.2, 0.2}};
self.region = region;
return self;
}
谢谢,艺术
如果'self.mapView.userLocation.location.coordinate'给你0,0,可能是因为mapView或userLocation或location是一个零指针。 – progrmr