У меня есть вид на карту с булавками, когда пользователь выбирает штырь, он переходит к подробному экрану для этого вывода. У меня также есть представление таблицы, что, когда пользователь выбирает элемент, он переходит к подробному представлению того же типа.Проблема с аннотацией карты и MKMapView в iOS 4.2?
Вот проблема ...
кажется, работает хорошо во всем от 3.1.3 до 4.1. То есть макет с совпадающими точками. Но у меня есть пользователь, который только что обновился до iOS 4.2 и говорит, что под 4.1 он работал нормально, но в 4.2 выбор штыря выводит его на деталь для другого булавки. Но в представлении таблицы все еще отлично.
Возможно ли, что в iOS 4.2 произошли изменения в MKMapView, который изменяет способ выбора pinID?
Сложение - я добавил соответствующие части viewForAnnotation и checkButtonTapped
- (MKPinAnnotationView *)mapView:(MKMapView *)eMapView viewForAnnotation:(id <MKAnnotation>)annotation {
int postTag = 0;
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[eMapView dequeueReusableAnnotationViewWithIdentifier:@"Pin"];
if(pinView == nil) {
pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"];
pinView.frame = CGRectMake(0, 0, 25, 25);
} else {
pinView.annotation = annotation;
}
// Set up the Right callout
UIButton *myDetailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
myDetailButton.frame = CGRectMake(0, 0, 23, 23);
myDetailButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
myDetailButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
[myDetailButton addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
// Identify which pin is being selected
if ([[annotation title] isEqualToString:@"Current Location"]) {
postTag = 99999;
} else {
postTag = [annotation getPinID];
}
myDetailButton.tag = postTag;
pinView.rightCalloutAccessoryView = myDetailButton;
pinView.animatesDrop = YES;
// Set to show a callout on the pin
pinView.canShowCallout = YES;
return pinView;
}
// Method to show detail view when the callOut button is selected
- (IBAction) checkButtonTapped: (id) sender {
int nrButtonPressed = ((UIButton *)sender).tag;
if (nrButtonPressed < 99999) {
if (self.showDetailView == nil) {
DetailData *tmpViewController = [[DetailData alloc] initWithNibName:@"Detail" bundle:nil];
self.showDetailView = tmpViewController;
[tmpViewController release];
}
buttonDetail = [[mapView annotations] objectAtIndex:(nrButtonPressed-1)];
NSMutableArray *tmpArray = [NSMutableArray arrayWithObjects: [buttonDetail getDataI], [buttonDetail getDataII], [buttonDetail getDataIII], [buttonDetail getDataIV], [buttonDetail getDataV], nil];
self.showDetailView.eventData = [[NSMutableArray alloc] initWithArray:tmpArray copyItems:YES];
[self.navigationController pushViewController:self.showDetailView animated:YES];
[self.showDetailView.eventData release];
}
}
Как вы можете видеть, в checkButtonTapped я записываю булавку выбранного затем собирать данные из аннотации для этого штифта , Проблема заключается в том, что nrButtonPressed теперь некорректен. Но это прекрасно, если скомпилировано в 4.1.
Показать метод viewNotation и код, который обрабатывает выбор штифта. – Anna 2010-12-08 03:39:31
Я буду рад опубликовать код (его довольно долго), но я не думаю, что это проблема. Причина в том, что я запускаю версию, скомпилированную в 4.1 на iPod Touch, и ее штраф.Я не вносил никаких изменений в viewForAnnotation, и когда я скомпилирован в 4.2, у него есть ошибка в симуляторе (эмуляция iPhone 4.2). Пользователь сказал, что старая версия приложения отлично работает в 4.1, но когда он обновил до версии 4.2 той же версии приложения начали показывать ошибку. Вы все еще хотите код, потому что я опубликую его, если вы это сделаете? – LancDec 2010-12-08 04:56:28