2012-01-10 3 views
2

Я новичок в iphone, используя MKMapView, чтобы загрузить карту Google в моем приложении. Но это исключение «MKMapView должно быть инициализировано в основном потоке». Итак, где я должен инициализировать мой объект MKMapView. Я инициализируюсь в viewDidLoad().MKMapView должен быть инициализирован в основном потоке

заранее спасибо .....

+0

Вы действительно должны при условии, более подробной информации ... – Vladimir

ответ

3

Причина, по которой не является создание в основном потоке является одним из 2-х вариантов

  1. The View, который создает он живет на одном из фона темы
  2. Вы вызываете performSelectorInBackground: создать свой вид

чтобы выполнить функцию главного вызова Thread performSelectorOnMainThread:

Не по теме: Если функция требует более 1 параметр, измените его на NSDictionary и загрузить все ваши настройки в словарь и передать его, например, в

NSDictionary *params = ...... //load your parameters into here 

[myMapView performSelectorOnMainThread:@selector(initMap:) 
           withObject:params 
          waitUntilDone:YES]; 

Также читайте следующие First и Second для лучшего понимания многопоточности в iOS

+0

Я использую следующий код в viewDidLoad и этот вид называется другим видом MAPview = [[MKMapView Alloc] initWithFrame: CGRectMake (0,0,780,920)]; mapView.delegate = self; [self.view addSubview: mapView]; [NSThread detachNewThreadSelector: @selector (displayMyMap) toTarget: self withObject: nil]; – user1141020

+0

Вы создаете новый поток, делая это, попробуйте изменить на performSelectorOnMainThread вместо detachNewThreadSelector – CStreel

+0

спасибо за ваше предложение, но все же я столкнулся с той же проблемой – user1141020

0

С помощью Swift 3 следующее функционирование будет выполняться в основном потоке. OperationQueue.main.addOperation { «ваш переход или вызов функции»}

+1

Добро пожаловать в SO. Пожалуйста, заверните свой код обратными окнами, чтобы он отображался как код. – YakovL

0

Я получил эту ошибку:

MKMapView must be initialized on the main thread

Когда я попытался изменить содержание настраиваемой UITableViewCell следующим образом:

[self.tableView beginUpdates]; 
[self.tableView reloadRowsAtIndexPaths:@[myIndexPath] withRowAnimation:UITableViewRowAnimationNone]; 
[self.tableView endUpdates]; 

The UITableviewCell in the corresponding indexpath contained a MKMapView that I tried to change its region. 

myTabelViewCell *cell = [self.tableView cellForRowAtIndexPath:myIndexPath]; 
[cell setContentWithLatitude:currentLatitude longitude:currentLongitude]; 

Используйте приведенный выше код вместо [self.tableView reloadData], чтобы обновить только одну ячейку.

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