cout << "Enter the number: ";
int number;
cin >> number;
cout << "Enter names: ";
string names;
getline(cin, names);//works on the \n left behind
getline(cin, names);//continues and rewrites names
его довольно самообучающийся, в потоке, который используется cin >> number
, есть\n, который присваивается именам при первом использовании. Повторное использование getline теперь записывает правильное значение.
Я столкнулся с той же проблемой, но нашел то, что кажется надежным и разумным решением:
Реализуйте метод делегата mapView: didAddAnnotationViews :. Когда я попытался выбрать аннотацию непосредственно в методе делегата, выноска упала с булавкой! Это выглядело странно, поэтому я добавляю небольшую задержку в полсекунды.
- (void) mapView: (MKMapView *) mapView didAddAnnotationViews: (NSArray *) views {
[self performSelector: @selector (selectInitialAnnotation)
withObject: nil afterDelay: 0.5]; { {1}}}
Выберите начальную аннотацию, как и следовало ожидать, но вызовите selectAnnotation: animated;
- (void) selectInitialAnnotation {
[self.mapView selectAnnotation: self .initialAnnotation animated: YES];
}
Кажется, что selectAnnotation: animated:
не вызывается при некоторых условиях. Сравните с документами MKMapView :
Если указанная аннотация не отображается на экране и, следовательно, не имеет связанного представления аннотации, этот метод не имеет никакого эффекта.
У меня была похожая проблема, но я вообще не мог заставить этот метод работать, не говоря уже о непоследовательности.
Вот что мне удалось. Возможно, это сработает и для вас: Как запустить представление выноски MKAnnotationView, не касаясь булавки?
У меня сработал вызов selectAnnotation: animated:
из mapView: didAddAnnotationViews:
метод:
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views;
{
[mapView selectAnnotation:[[mapView annotations] lastObject] animated:YES];
}
Документация Apple по тому же здесь .
Обратите внимание, что у меня была только одна аннотация на карте, поэтому [[аннотации mapView] lastObject ]
подходил для моих целей. Ваш пробег может отличаться.
У меня была аналогичная проблема. Я использовал MKPinAnnotationView по умолчанию с animatesDrop: YES. После того, как я добавил аннотации в MKMapView, я делал следующее:
[mapView selectAnnotation:[mapView.annotations objectAtIndex:1] animated:YES]
, который по логике моей программы должен выбирать ближайшую аннотацию. Это не сработало. Я выяснил причину: представление аннотации не было на экране во время этого вызова select из-за анимации падения булавки. Поэтому все, что я сделал, - это установил таймер, чтобы выбрать аннотацию через секунду. Это взлом, но он работает. Я не уверен, что это Я буду работать в любой ситуации, например, в сетях 3G и 3G. Было бы лучше найти правильную функцию обратного вызова, чтобы вставить ее.
selectTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self
selector:@selector(selectClosestAnnotation) userInfo:nil
repeats:NO];
- (void)selectClosestAnnotation {
[mapView selectAnnotation:[mapView.annotations objectAtIndex:1]
animated:YES];
}