Получение неправильной аннотации от метода делегата MapView -- iphone поле с участием objective-c поле с участием ios4 поле с участием mkmapview пол Связанный проблема

Getting wrong annotation from MapView Delegate method


0
vote

проблема

русский

Я объявил следующее в своем файле .h:

<Код> Annotation *annoForMoreDetails .

Однако, когда я пытаюсь установить его в текущую аннотацию в методе

<Код> - (MKAnnotationView *)mapView:(MKMapView *)mapViews viewForAnnotation:(id <MKAnnotation> )annotation

Он устанавливается неверному объекту.

Вот мой код:

 <код>  - (MKAnnotationView *)mapView:(MKMapView *)mapViews viewForAnnotation:(id <MKAnnotation> )annotation {     NSLog(@"welcome into the map view annotation");     // if it's the user location, just return nil.     if ([annotation isKindOfClass:[MKUserLocation class]])         return nil;     for (annotation in [mapView annotations]) {         if ([[mapView annotations] containsObject:annotation]) {             annoForMoreDetails = annotation;         }     }     if (annoForMoreDetails.coordinate.latitude != mapViews.userLocation.coordinate.latitude && annoForMoreDetails.coordinate.longitude != mapViews.userLocation.coordinate.longitude) {     // try to dequeue an existing pin view first     static NSString* AnnotationIdentifier = @"AnnotationIdentifier";     MKPinAnnotationView* pinView = [[[MKPinAnnotationView alloc]                                      initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];     pinView.animatesDrop=YES;     pinView.canShowCallout=YES;     pinView.pinColor = MKPinAnnotationColorGreen;      UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];     [rightButton setTitle:annotation.title forState:UIControlStateNormal];     [rightButton addTarget:self                     action:@selector(moreDetails)           forControlEvents:UIControlEventTouchUpInside];     pinView.rightCalloutAccessoryView = rightButton;     return pinView;     }     else if (annoForMoreDetails.coordinate.latitude == mapViews.userLocation.coordinate.latitude && annoForMoreDetails.coordinate.longitude == mapViews.userLocation.coordinate.longitude) {         return nil;     }     return nil; }  - (void)moreDetails {     annotationCalloutView.frame = CGRectMake(70, 120, 188, 218);     annotationCalloutView.alpha = 0.0;     mapView.userInteractionEnabled = NO;     annotationCalloutView.userInteractionEnabled = YES;     titleLabel.text = annoForMoreDetails.title;     titleLabel.numberOfLines = 0;     titleLabel.userInteractionEnabled = NO;     addressLabel.text = annoForMoreDetails.subtitle;     [self.view addSubview:annotationCalloutView];     [UIView beginAnimations:@"callout" context:NULL];     [UIView setAnimationDuration:0.6];     annotationCalloutView.alpha = 1.0;     [UIView commitAnimations]; }   

Если вы видите что-то не так, пожалуйста, укажите его!

Английский оригинал

I have declared the following in my .h file:

Annotation *annoForMoreDetails.

However when I try to set it to the current annotation in the method

- (MKAnnotationView *)mapView:(MKMapView *)mapViews viewForAnnotation:(id <MKAnnotation> )annotation

It gets set to the wrong object.

Here is my code:

 - (MKAnnotationView *)mapView:(MKMapView *)mapViews viewForAnnotation:(id <MKAnnotation> )annotation {     NSLog(@"welcome into the map view annotation");     // if it's the user location, just return nil.     if ([annotation isKindOfClass:[MKUserLocation class]])         return nil;     for (annotation in [mapView annotations]) {         if ([[mapView annotations] containsObject:annotation]) {             annoForMoreDetails = annotation;         }     }     if (annoForMoreDetails.coordinate.latitude != mapViews.userLocation.coordinate.latitude && annoForMoreDetails.coordinate.longitude != mapViews.userLocation.coordinate.longitude) {     // try to dequeue an existing pin view first     static NSString* AnnotationIdentifier = @"AnnotationIdentifier";     MKPinAnnotationView* pinView = [[[MKPinAnnotationView alloc]                                      initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];     pinView.animatesDrop=YES;     pinView.canShowCallout=YES;     pinView.pinColor = MKPinAnnotationColorGreen;      UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];     [rightButton setTitle:annotation.title forState:UIControlStateNormal];     [rightButton addTarget:self                     action:@selector(moreDetails)           forControlEvents:UIControlEventTouchUpInside];     pinView.rightCalloutAccessoryView = rightButton;     return pinView;     }     else if (annoForMoreDetails.coordinate.latitude == mapViews.userLocation.coordinate.latitude && annoForMoreDetails.coordinate.longitude == mapViews.userLocation.coordinate.longitude) {         return nil;     }     return nil; }  - (void)moreDetails {     annotationCalloutView.frame = CGRectMake(70, 120, 188, 218);     annotationCalloutView.alpha = 0.0;     mapView.userInteractionEnabled = NO;     annotationCalloutView.userInteractionEnabled = YES;     titleLabel.text = annoForMoreDetails.title;     titleLabel.numberOfLines = 0;     titleLabel.userInteractionEnabled = NO;     addressLabel.text = annoForMoreDetails.subtitle;     [self.view addSubview:annotationCalloutView];     [UIView beginAnimations:@"callout" context:NULL];     [UIView setAnimationDuration:0.6];     annotationCalloutView.alpha = 1.0;     [UIView commitAnimations]; } 

If you see anything wrong please point it out!

</div
           
   
   

Список ответов

1
 
vote
vote
Лучший ответ
 

Вы пытаетесь использовать AnnoFormovedetails, чтобы узнать, какую аннотацию пользователь постучал так, чтобы вы могли показать более подробно? Если это так, есть проще. Используйте MAP View's CalloutacceSsoryControltapped Develate Delettret. Он будет вызван, когда пользовательские нажатия на кнопке аксессуаров и пройдут вид аннотации, который включает в себя аннотацию в качестве свойства.

Удалить переменную экземпляр Annofmoredetails и в ViewFornannationation, снимите цикл, который устанавливает Annofmoredetails (я думаю, что он в конечном итоге в конечном итоге устанавливает его до последней аннотации каждый раз). Удалите все другие ссылки на Annoformovedetails.

Также в ViewFornannotationation, удалите строку AddTarget на правом праве, поскольку вы замените свой метод настраивания MOREDETAILS с помощью реализации CalloutaccessoryControLtapped:

 <код> - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view      calloutAccessoryControlTapped:(UIControl *)control {     Annotation *annoForMoreDetails = (Annotation *)view.annotation;      //the code currently in moreDetails method goes here... }   
 

Are you trying to use annoForMoreDetails to know which annotation the user tapped on so you can show more details? If that's the case, there's an easier way. Use the map view's calloutAccessoryControlTapped delegate method. It will be called when the user taps on the accessory button and it will pass the annotation view which includes the annotation as a property.

Remove the annoForMoreDetails instance variable and in viewForAnnotation, remove the for-loop that sets annoForMoreDetails (I think it ends up setting it to the last annotation every time). Remove all other references to annoForMoreDetails.

Also in viewForAnnotation, remove the addTarget line on the rightButton since you'll replace your custom moreDetails method with an implementation of calloutAccessoryControlTapped:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view      calloutAccessoryControlTapped:(UIControl *)control {     Annotation *annoForMoreDetails = (Annotation *)view.annotation;      //the code currently in moreDetails method goes here... } 
</div
 
 
 
 

Связанный проблема

57  Как динамически разместить высоту UiableViewCell  ( How to dynamically resize uitableviewcell height ) 
У меня есть классический сгруппированный UiableView с редактируемым UIrextViews внутри каждой ячейки. Этот текстовые представления могут быть одиночными или м...

0  Не можете получить панель поиска для отображения в приложении iPhone  ( Cant get search bar to display in iphone application ) 
Я пытаюсь получить панель поиска для отображения в моем приложении. Я следую в примере Show в приложении TableSearch Sample. Я более или менее реализован ...

1  Как я могу получить токен доступа через API FBConnect?  ( How can i get access token through fbconnect api ) 
Я хочу знать, смогу ли я получить токен доступа через API FBConnect, используя SDK iPhone. Я могу получить один через fbgraph, но я хочу использовать fbconn...

0  Призматическое соединение вызывает сбой коробки2D (Cocos2D)  ( Prismatic joint causes a crash box2dcocos2d ) 
Я пытался настроить призматический сустав, но я получаю эту ошибку при выполнении времени: Ошибка утверждения: (заблокировано () == false), функциональная нас...

15  Как получить все записи NSFetchedResultScontroller / NsmanageObjectContext?  ( How to get all entries of a nsfetchedresultscontroller nsmanagedobjectcontext ) 
У меня есть хорошее рабочее приложение для iPhone, которое работает с основными данными. Я использую NSFetchedResultScontroller / NSManageObjectContext, как о...

3  Как создать универсальные приложения на iPhone / iPad?  ( How to create universal apps in iphone ipad ) 
Я хочу создать универсальные приложения. Я уже сделал несколько приложений для iPhone. Теперь я хочу начать универсальные приложения, что означает, что прилож...

2  Удаление разделов UiableView сочетается с пользовательскими заголовками раздела Uiviews = ошибка в коде Apple?  ( Deleting uitableview sections combined with custom section headers uiviews bug ) 
Я пытаюсь удалить раздел из UiableView с использованием анимации и пользовательской таблицы заголовка раздела UIViews. Я использую ... <код> //Deletion fr...

2  IPhone UiableView подавляет кнопку раскрытия, когда кнопка «Удаление» отображается  ( Iphone uitableview suppress disclosure button when delete button is displayed ) 
У меня есть <код> UITableView , который имеет кнопку раскрытия на каждой строке. Когда таблица введена в режим редактирования, и управление удалением нажата (...

1  Не удается изменить размер кадра UiscrollView  ( Cannot resize uiscrollviews frame ) 
У меня есть UiscrollView с его рамой и содержимым с таким же размером. Я хочу изменить высоту кадра ScrollView, когда появится клавиатура, но она не работает....

4  Создайте каталог на iPhone  ( Create a directory on an iphone ) 
Я хочу знать, как создать каталог на указанном пути. Я использовал "систему (" путь каталога ");" Это работает нормально в симуляторе, но не на устройстве ...

1  Нужно, чтобы получить доступ к URL в моем одном представлении ИОС приложения с помощью веб-просмотра  ( Need to access the url in my single view ios application using web view ) 
<Р> У меня есть один вопрос относительно WebView. У меня есть URL-адрес, и нужно, чтобы запустить этот URL в WebView. и мой код здесь идет .. <код> NSLog(@"R...

0  вебсервис В Iphone SDK?  ( Webservice in iphone sdk ) 
<Р> я скачал WSDLObjC-0,6 от Google, чтобы включить SOAP веб-сервис в IPhone SDK.But это является, как App файл, как я могу интегрировать этот файл в iPhone SD...

-1  Как я могу просмотреть накопительную кулачок в моем собственном приложении для iPhone и Android?  ( How can i view a drop cam feed in my own app for iphone and android ) 
У меня есть клиент, который хочет показать его подачу капюма в своем собственном приложении, а не приложение, которое предоставляет CAM. Однако после вызова D...

8  Как обрезать изображение в частях программно  ( How to crop image in to pieces programmatically ) 
Мне нужно разделить изображение на 9 штук программно. Любые предложения о том, как это сделать? ...

1  Обновите и вставьте объемные данные XML в мою базу данных SQLite  ( Update and insert bulk xml data into my sqlite database ) 
Я хочу загрузить хостованный XML документ в базу данных My приложения SQLite, обновляя существующие строки или вставляя новые строки данных по мере необходимо...

Связанный проблема

57  Как динамически разместить высоту UiableViewCell 
0  Не можете получить панель поиска для отображения в приложении iPhone 
1  Как я могу получить токен доступа через API FBConnect? 
0  Призматическое соединение вызывает сбой коробки2D (Cocos2D) 
15  Как получить все записи NSFetchedResultScontroller / NsmanageObjectContext? 
3  Как создать универсальные приложения на iPhone / iPad? 
2  Удаление разделов UiableView сочетается с пользовательскими заголовками раздела Uiviews = ошибка в коде Apple? 
2  IPhone UiableView подавляет кнопку раскрытия, когда кнопка «Удаление» отображается 
1  Не удается изменить размер кадра UiscrollView 
4  Создайте каталог на iPhone 
1  Нужно, чтобы получить доступ к URL в моем одном представлении ИОС приложения с помощью веб-просмотра 
0  вебсервис В Iphone SDK? 
-1  Как я могу просмотреть накопительную кулачок в моем собственном приложении для iPhone и Android? 
8  Как обрезать изображение в частях программно 
1  Обновите и вставьте объемные данные XML в мою базу данных SQLite