Objective c 地图视图:DIDADD注释视图:不';不回答

Objective c 地图视图:DIDADD注释视图:不';不回答,objective-c,cocoa,delegates,mkmapview,Objective C,Cocoa,Delegates,Mkmapview,我目前正在阅读《iPhone编程大书呆子牧场指南》,在第96页遇到了一些问题 我已经正确地分配了MKMapViewDelegate(使用多个代理进行了测试),并且每个代理都响应所做的更改。但在这次代表会议上: - (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views { MKAnnotationView *annotationView = [views objectAtIndex:0]; id&

我目前正在阅读《iPhone编程大书呆子牧场指南》,在第96页遇到了一些问题

我已经正确地分配了MKMapViewDelegate(使用多个代理进行了测试),并且每个代理都响应所做的更改。但在这次代表会议上:

- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views
{
    MKAnnotationView *annotationView = [views objectAtIndex:0];

    id<MKAnnotation> mp = [annotationView annotation];

    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate], 250, 250);
    [mv setRegion:region animated:TRUE];
    NSLog(@"Test");
}

我不知道哪一部分错了。[mapView setShowUserLocation:TRUE]是否向地图添加注释?如果是,为什么上面的方法没有响应?

这是因为您还没有添加注释!显示用户位置的蓝色指示器未归类为注释。只需在地图视图上放置一个红色别针(按住地图),即可添加注释


如果您想以编程方式为地图视图创建自己的注释,我建议您首先查看中的“注释地图”部分,并查看(如果您不熟悉协议,我强烈建议您也阅读这些协议!)您可以使用符合此协议的类实例,您可以使用MKMapView类的
addAnnotation:
实例方法添加注释。

我之前回答过类似的问题。

您是否尝试在地图上放置pin?有一个蓝色指示器由[mapView setShowUserLocation:TRUE]生成,这算是pin吗?我不确定-只是尝试添加另一个pin!:)TBH,我在尝试添加pin时遇到问题。你能告诉我怎么做吗?因为我遇到了类似id的问题,我不知道如何继续。你能不能按住设备上的地图视图?我还在阅读文档,但我就是想不出来。[mapView addAnnotation:]需要变量id)注释。我不知道如何创建此变量。您需要创建符合MKAnnotation协议的类的实例,并将此实例传递给
addAnnotation:
。尝试使用
addAnnotation:
将MKPinAnnotationView的实例添加到映射中(它符合MKAnnotation协议)是,在我添加pin后,它实际上可以工作。但是书中的解释没有添加任何pin,而是将蓝色指示器视为pin。我已粘贴了这本书的引文。是不完整还是缺少什么?预期结果是应用程序缩放到当前位置而不是pin。谢谢,我将使用它作为参考。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDelegate:self];

    [locationManager setDistanceFilter:kCLDistanceFilterNone];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

    //[locationManager startUpdatingLocation];
    [mapView setShowsUserLocation:TRUE];

    [self.window makeKeyAndVisible];

    return YES;
}