2014-09-29 2 views
0

Я разрабатываю приложение, в котором фермер бросает пользовательские аннотации (контакты с цифрами) в интересующих его уроках, отправляет отчет со снимком экрана в свой офис и переходит к следующему загон.MKAnnotation сохраняется со старой информацией

part screenshot of field of pins

Часть кода, который отправляет сообщение электронной почты включают в себя сброс свойств и обнуления массивов и Ивар и т.д. Его первое поле отлично работает, но нумерация POI во всех областях, которые следуют забарахлить. Данные, представленные ошибочными штифтами, правильны, а сами штыри не являются (более того, через минуту >> **).

Таким образом, я установил, что нет ничего плохого ни с чем, приводя к падению штырей и я прочистила аннотации с:

[ self.mapView removeAnnotations:self.mapView.annotations]; 

яблока документов упоминает, что один также необходимо реализовать этот метод в сбросе:

[ self.mapView dequeueReusableAnnotationViewWithIdentifier:@"myAnnotation"]; 

потому что, хотя они были очищены от экрана, они все еще присутствуют в памяти. Однако это все еще не устраняет мое quandry. Если я явно вычеркнул свои аннотации из:

self.mapView.annotations = nil; 

проблема остается. Числа в аннотации кажутся случайными во втором и третьем. Регистрируясь в экранном текстовом элементе, я вижу массив, содержащий правильные значения номера POI. Что-то о CLLocation или MKnnotation все еще сохраняется где-то. В справочнике классов в Apple ничего не говорится о том, как сбросить CLLocationManager, поэтому я полагаю, что это делается с помощью простых «Пуск» и «Стоп». Мое использование этих элементов правильно сбалансировано, поэтому я не запускаю несколько экземпляров.

** >> Вот фрагмент кода, который решает, что контактный падение, действие происходит в середине, где комментировал

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation(id<MKAnnotation>)annotation 
{ 
if([annotation isKindOfClass:[MKUserLocation class]]) 
    return nil; 

    static NSString *identifier = @"myAnnotation"; 
MKAnnotationView * annotationView = (MKAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 

if (!annotationView) 
{ 
    annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 


      // standard stuff up to here 
      // findings build up as a score of each test point. 

    if (contentScore == 0) 
    { 
      // a green asterisk marker if no score was achieved 

    annotationView.image = [UIImage imageNamed:@"markerZero.png"];  
    } else { 

      // the marker number comes from idx in SiteCount Array 

    str = [NSString stringWithFormat:@"marker%d.png",siteCount[idx]; 
    annotationView.image = [UIImage imageNamed:str]; 
    } 


} else { 
    annotationView.annotation = annotation; 
} 

return annotationView; 
} 

В настоящее время обходной путь является неудобным работа вынимая его из памяти на главном экране и перезапуск перед началом следующего поля. Я мог бы вернуться к использованию красных и зеленых контактов, предоставленных системой, но он был испорчен, имея номера для перекрестного ссылки на отчет.

Итак, где я должен искать? Кто является виновником? Я подозреваю MKAnnonation, но мое знание Закончились

+1

[ ответьте на свой предыдущий вопрос (и другие ответы на него ссылаются)] (http://stackoverflow.com/questions/24215210/does-mkannotationview-buffer-its-input-queue) применяется здесь одинаково. В viewForAnnotation код использует внешние переменные contentScore и idx, предполагая, что они будут синхронизироваться с текущим параметром аннотации. Кроме того, свойства вида обновляются только при создании (так что изображение с обратным просмотром/повторным использованием показывает старое изображение аннотации). – Anna

+0

Я все время проводил с тех пор, как этот вопрос получил ваши предложения для работы, до того момента, когда я отказался от истории. Я встретил сотни ответов SO, в которых используются переменные, чтобы определить что-то о своих контактах и ​​OP Уходи, счастлив. О, хорошо, чтобы снова работать, и тогда я вернусь к тебе в Рождество. – aremvee

+1

Конечно, вы можете использовать переменные, чтобы определить что-то о контактах. Но эти переменные должны быть напрямую привязаны к рассматриваемой аннотации или код должен применяться, когда представление создается или удаляется. В приведенном выше коде idx не может применяться к текущей аннотации И применяется только при создании представления. – Anna

ответ

0

Как сказал @Anna, вы не полностью Повторная инициализация вас вид аннотаций, если многоразовый вид из очереди -

Вы должны иметь что-то вроде

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation(id<MKAnnotation>)annotation 
{ 
    if([annotation isKindOfClass:[MKUserLocation class]]) 
     return nil; 

    static NSString *identifier = @"myAnnotation"; 

    MKAnnotationView * annotationView = (MKAnnotationView*)[self.mapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 

    if (!annotationView) { 
     annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 
    }      //Note this closing brace! 

      // standard stuff up to here 
      // findings build up as a score of each test point. 

    if (contentScore == 0) { 
      // a green asterisk marker if no score was achieved 
     annotationView.image = [UIImage imageNamed:@"markerZero.png"];  
    } else { 
      // the marker number comes from idx in SiteCount Array 
     str = [NSString stringWithFormat:@"marker%d.png",siteCount[idx]; // As per @anna's comment I am not sure how you are managing this - It would be better if the number came from the associated annotation object 
     annotationView.image = [UIImage imageNamed:str]; 
    } 

    annotationView.annotation = annotation; 
} 
+0

aaaahhhh объясняет, почему они позвонили в один прекрасный день и заметили, что штифты меняли номера во время их вылазки. Они, должно быть, прокручивали представление за пределы экрана и в повторном завершении штифтов дела. Да, Анна выдающаяся в своей области, особенно когда она вышла на поле, такое, какое они были ;-) – aremvee

Смежные вопросы