同様の問題をすべてスキャンし、考えられるすべての解決策を試しましたが、まだ私の場合の解決策を見つけることができません。MapViewに複数のピンを配置しようとしましたが、ピンを正常に追加できないようです。viewDidLoadメソッドでNSTimerを開始したので、5秒ごとに、更新されたピンがMapに配置されます。デバッグ情報を追加しましたが、問題はviewForAnnotationメソッドが呼び出されないことでした。([_map setDelegate:self]を呼び出してデリゲートを設定しました)
私のコードは次のとおりです。
- (void)viewDidLoad
{
[super viewDidLoad];
_map = [[MKMapView alloc] initWithFrame:[[self view] frame]];
[_map setDelegate:self];
CLLocationCoordinate2D startLocation;
startLocation.latitude = [startLat floatValue];
startLocation.longitude = [startLong floatValue];
MKCoordinateSpan span = MKCoordinateSpanMake(0.002, 0.002);
MKCoordinateRegion region = MKCoordinateRegionMake(startLocation, span);
[_map setRegion:region];
[[self view] addSubview:_map];
[self getPlacesForLocation:[_map centerCoordinate]];
NSTimer *currentTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(theActionMethod:) userInfo:nil repeats:YES];
[currentTimer fire];
}
getPlacesForLocationMethod:
-(void)getPlacesForLocation:(CLLocationCoordinate2D)location
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^
{
/* get data from the website
** get the geo information and put them in the MapPin struct
*/
[self putPinsOnMap];
}
}
putPinsOnMap:
-(void)putPinsOnMap
{
for(Pinfo *iter in [_PinfoArray copy])
{
MapPin *pin = [[MapPin alloc] init];
[pin setTitle:[iter from_user_name]];
[pin setSubtitle:[iter text]];
[pin setCoordinate:[iter location]];
//NSLog(@"The coordinate is %f %f", [pin coordinate].latitude, [pin coordinate].longitude);
[_map addAnnotation:pin];
/****************************************/
NSLog(@"Try to put the pin on Map");
/****************************************/
}
}
そして、これが私のMapPin.hのコンテンツです:
@interface MapPin : NSObject<MKAnnotation>
@property (nonatomic, copy) NSString *title, *subtitle;
@property (nonatomic) CLLocationCoordinate2D coordinate;
@end
その場にとどまると、(void)putPinsOnMapが呼び出されるたびに、「ピンをマップに配置してみてください」と出力されますが、viewForAnnotationメソッドは呼び出されません(デバッグ情報も追加しましたが、いずれも出力されません)。ズームアウトすると、 viewForAnnotationメソッドが呼び出されることがあります。