Я разрабатываю приложение, в котором фермер бросает пользовательские аннотации (контакты с цифрами) в интересующих его уроках, отправляет отчет со снимком экрана в свой офис и переходит к следующему загон.MKAnnotation сохраняется со старой информацией
Часть кода, который отправляет сообщение электронной почты включают в себя сброс свойств и обнуления массивов и Ивар и т.д. Его первое поле отлично работает, но нумерация 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, но мое знание Закончились
[ ответьте на свой предыдущий вопрос (и другие ответы на него ссылаются)] (http://stackoverflow.com/questions/24215210/does-mkannotationview-buffer-its-input-queue) применяется здесь одинаково. В viewForAnnotation код использует внешние переменные contentScore и idx, предполагая, что они будут синхронизироваться с текущим параметром аннотации. Кроме того, свойства вида обновляются только при создании (так что изображение с обратным просмотром/повторным использованием показывает старое изображение аннотации). – Anna
Я все время проводил с тех пор, как этот вопрос получил ваши предложения для работы, до того момента, когда я отказался от истории. Я встретил сотни ответов SO, в которых используются переменные, чтобы определить что-то о своих контактах и OP Уходи, счастлив. О, хорошо, чтобы снова работать, и тогда я вернусь к тебе в Рождество. – aremvee
Конечно, вы можете использовать переменные, чтобы определить что-то о контактах. Но эти переменные должны быть напрямую привязаны к рассматриваемой аннотации или код должен применяться, когда представление создается или удаляется. В приведенном выше коде idx не может применяться к текущей аннотации И применяется только при создании представления. – Anna