2011-12-01 80 views
0

情况如下,我正在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; 
    } 

谢谢,艺术

+0

如果'self.mapView.userLocation.location.coordinate'给你0,0,可能是因为mapView或userLocation或location是一个零指针。 – progrmr

回答

2

在模拟器的默认位置是库比蒂诺。在最新的Xcode(4.2,我相信),你可以从预填充位置的菜单(到你可以简单地通过在项目中的GPX文件添加你自己的)设置模拟器的位置。

如果您的设备上运行,并启用位置服务,为应用程序,你应该用你的代码获得一个有效的位置。

+0

好吧,我知道库比蒂诺是预设位置,但为什么蓝色用户的标记是在库比蒂诺和mapView.userLocation是在非洲?他们为什么不同? – Anonymous

+1

@检查mapView.userLocation是否为'nil'。 –

+0

我对此没有答案。您是否尝试过在设备上或Xcode 4.2中(将位置设置为非Cupertino)? – mharper

0

让我澄清一下我的问题...... 据我了解userLocation似乎无人在模拟器上......好吧......但第二个问题是为什么没有调用CLLocationManagerDelegate方法“didUpdateToLocation”? 我看到这个教程,它甚至应该在模拟器被称为... 那我做错了什么? http://www.youtube.com/watch?v=qNMNRAbIDoU&feature=related 同时,我在日志得到这样的错误 - “服务器不接受客户登记68” 可这是为什么位置代表不叫?

UPDATE:

我想这个对的Xcode 4.3和它仍然无法在第二工作... 在第一次调用用户位置返回(0,0) - (-180,-180)

然后我切换到IOS 5 SDK现在地图不与错误加载在所有 - __GEORegisterNetworkDefaults_block_invoke_0: Could not connect to geod on com.apple.geod.defaults

UPDATE:

卸载所有的Xcode版本,然后安装的稳定版本4.2确实帮助...... 解决!

+0

良好的信息。顺便说一句,如果你最终去安装Xcode 4.3测试版,一定要将它安装在4.2安装的* separate *目录下。 – mharper