Как добавить аннотации в MKMapView асинхронно?

У меня есть много аннотаций, которые нужно добавить в mkmapview. Когда я добавляю аннотации, приложение замерзает в течение короткого периода времени. Я понимаю, что основной поток является единственным потоком, разрешенным для добавления пользовательского интерфейса для просмотра, если это так, как сделать эту операцию, чтобы не заморозить приложение?

// in viewdidLoad for (NSManagedObject *object in requestResults) { CustomAnnotation *customAnnotation = [[CustomAnnotation alloc] init]; customAnnotation.title = object.title; customAnnotation.coordinate = CLLocationCoordinate2DMake([object.latitude doubleValue], [object.longitude doubleValue]); [_mapView addAnnotation:customAnnotation]; } } // end viewdidload - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { // shows the annotation with a custom image MKPinAnnotationView *customPinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"mapAnnotation"]; CustomAnnotation *customAnnotation = (id) annotation; customPinView.image = [UIImage imageNamed:@"green"]; return customPinView; } 

  • Перемещение юридического ярлыка (MKAttributionLabel)
  • Как объявить MKPolygon
  • Направления iOS в iOS6
  • MKMapView setSelected: анимированный: не работает в первый раз
  • Как разделять значения широты и логинности с выхода JSON?
  • Как сохранить текущий уровень MKCoordinateRegion или масштабирования?
  • Как определить, что пользователь выбирает Не разрешать для MKMapView для iphone
  • показать пользователям местоположение синей точки в iPhone MKMapView
  • 2 Solutions collect form web for “Как добавить аннотации в MKMapView асинхронно?”

    Вы можете использовать Grand Central Dispatch – GCD для этого.

    Попробуйте:

     - (void)viewDidLoad { dispatch_async(dispatch_get_global_queue(0, 0), ^{ for (NSManagedObject *object in requestResults) { CustomAnnotation *customAnnotation = [[CustomAnnotation alloc] init]; customAnnotation.title = object.title; customAnnotation.coordinate = CLLocationCoordinate2DMake([object.latitude doubleValue], [object.longitude doubleValue]); dispatch_async(dispatch_get_main_queue(), ^{ [_mapView addAnnotation:customAnnotation]; }); } }); } 

    Это хороший учебник: GCD и threading

    Еще лучше и проще, проверьте -[MKMapView addAnnotations:] для массового добавления без затрат на пересчет каждой отдельной аннотации.

    Interesting Posts

    Добавить плагин для объектива-c в быстрый проект

    Дизайн эскиза iOS

    UITableView – Показать контроль порядка всегда, но все же можно удалять и выбирать строки

    Получение данных из блока завершения NSURLResponse

    Как я могу расшифровать файл, созданный в Objective-C, используя CCCrypt с помощью openssl?

    Изменение имени устройства CoreBluetooth

    Ошибка отчета в шаге: добавьте функцию Push Notifications в свой идентификатор приложения

    Как отключить анимацию для кода, вложенного в блок анимации UIView?

    Воспроизведение сири-кнопки

    Ошибка Xcode9 Realm – нет жизнеспособных перегруженных '='

    iOS: ShareKit >> Настройки Twitter >> Обратный звонок – что это такое?

    Удалена ли база данных Core Data с устройства при удалении приложения?

    Строковые методы в Swift для замены первого символа в строке

    позиционируйте вид в раскадровке на 1/3 экрана

    WKInterfaceController.openParentApplication задерживается на реальном устройстве?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.