Iphone MKMapView赢得';不要添加任何注释

Iphone MKMapView赢得';不要添加任何注释,iphone,objective-c,map,annotations,mkmapview,Iphone,Objective C,Map,Annotations,Mkmapview,我有一个MKMapView,其委托是在Interface Builder中设置的,它是其视图控制器的保留属性(也连接在Interface Builder中)。是的,我确信它们连接正确。我正在尝试向mapView添加注释,但mapView:viewForAnnotation:未被调用,并且在使用[self.map addAnnotation:annot]添加所有注释后,打印mapView注释数组的计数将得到零。我不知道是什么导致了这种情况,因为我的MapPerson对象使用只读坐标属性实现了MKA

我有一个MKMapView,其委托是在Interface Builder中设置的,它是其视图控制器的保留属性(也连接在Interface Builder中)。是的,我确信它们连接正确。我正在尝试向mapView添加注释,但mapView:viewForAnnotation:未被调用,并且在使用[self.map addAnnotation:annot]添加所有注释后,打印mapView注释数组的计数将得到零。我不知道是什么导致了这种情况,因为我的MapPerson对象使用只读坐标属性实现了MKAnnotation协议。这是我的业务代码

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MapPerson : NSObject <MKAnnotation> {
  CLLocationCoordinate2D _coo;
}

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

@end
我试图在委托方法中从服务类创建这些注释,该服务类将坐标从服务器获取到包含mapView的视图控制器。我尝试将代码移动到助手方法中,确保在主线程上调用该方法,但什么也没有发生

- (void)refreshMap {
  for (MapPerson *p in mapPeople) {
    [self.map addAnnotation:p];
  }
  NSLog(@"Mapview has %i annotations.", self.map.annotations.count);
  // is always 1 for the user's location
}

我已经在谷歌上搜索了一些不同的教程,这些教程与我的代码没有什么不同,只是名字不同。我在mapView:viewForAnnotation:中放置了一个断点,对于用户的位置注释只调用一次。人数是5人。他们的坐标设置正确。有什么想法吗?

你没有收到关于MapPerson的警告吗?我相信文档中说,如果要实现MKAnnotation,还需要提供标题和副标题

您能否提供填充mapPeople的代码


编辑:重新阅读文档,它说只有当您计划创建可选注释时,标题和副标题才会出现。

您是否检查过您的
p
人员是否为
nil

后端使用的是具有反向纬度/经度的MongoDB。因此,注释被添加到地图坐标平面上不存在的位置。我觉得自己像个白痴,没早点注意到这一点。谢谢你的回答

那么mapPeople中的所有内容都能正确检出吗?
MapPerson*p=[[MapPerson alloc]initWithCoordinate:CLLocationCoordinate2DMake(-150,34)];[对象:p];[p释放];如果(delegate&&[delegate respondsToSelector:@selector(mapService:didFetchPeople:)){[delegate mapService:self didFetchPeople:people];}
Hmm。。。并且正在正确调用refreshMap函数,但这不会触发viewForAnnotation?不,它不会触发viewForAnnotation。mapView的委托设置正确,并且viewForAnnotation仅为MKUserLocation批注触发。是否在refreshMap之外的任何位置更新批注?所以refreshMap也没有被调用?出于好奇,到目前为止,您使用了什么教程/走查来创建您所拥有的内容(如果有的话)?我根据以前的地图注释经验编写了这篇文章。我已经做过好几次了。这一定是我忽略了什么。RefreshMap仅从委托方法调用,该方法肯定会被激发。我还试着用另一个实现MKAnnotation协议的对象来实现它,但是也没有出现任何结果。我可以从代理内部打印每个MapPerson传递给代理的坐标。谢谢发布!我的MapView也在做同样的事情。。。我也颠倒了方向。
- (void)refreshMap {
  for (MapPerson *p in mapPeople) {
    [self.map addAnnotation:p];
  }
  NSLog(@"Mapview has %i annotations.", self.map.annotations.count);
  // is always 1 for the user's location
}