2013-02-25 3 views
1

Я создаю приложение, которое отправляет запрос на вызов для любого доступного пользователя по США и обновляет отправителя по ходу через оверлеи карт и индикатор выполнения. По какой-то причине карта и индикатор выполнения не обновляются до последнего шага, независимо от того, какие трюки я пытаюсь использовать в Grand Central Dispatch, CATransaction и т. Д. Обратите внимание, что я использую Parse для бэкэнд и завершения операций в блоке после получения объект.iOS map overlay не обновляется

dispatch_queue_t main_queue = dispatch_get_main_queue(); 
    PFQuery *repQuery = [PFQuery queryWithClassName:@"User"]; 
    [repQuery getObjectInBackgroundWithId:[_currentCallObject objectForKey:@"Rep"] block:^(PFObject *repUser, NSError *error) { 
     PFGeoPoint *repLocation = [repUser objectForKey:@"location"]; 
     dispatch_async(main_queue, ^{ 
      CLLocationCoordinate2D coordinates[2]; 
      coordinates[0] = _repMapView.userLocation.coordinate; 
      coordinates[1] = CLLocationCoordinate2DMake(repLocation.latitude, repLocation.longitude); 
      MKPolyline *route = [MKPolyline polylineWithCoordinates:coordinates count:2]; 
      MKCircle *circle1 = [MKCircle circleWithCenterCoordinate:coordinates[0] radius:40000]; 
      MKCircle *circle2 = [MKCircle circleWithCenterCoordinate:coordinates[1] radius:40000]; 
      [_repMapView addOverlay:circle1]; 
      [_repMapView addOverlay:circle2]; 
      [_repMapView addOverlay:route]; 
      [_repMapView setNeedsDisplay]; 
      [_callProgressView setProgressToStep:4]; 
      [CATransaction flush]; 
     }); 
    }]; 

мнение о ходе работы содержится в отдельном файле .m, но накладками нарисованы в том же файле .m как таковой:

- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay 
{ 
    // MKCircle and MKPolyline handled here 
} 

Я также поставил все следующие в заголовочном файле : MKMapViewDelegate, MKAnnotation, MKOverlay Кроме того, _repMapView.delegate = self; был установлен в первоначальном чертеже вида карты.

Я пропустил что-то очевидное здесь, из-за чего пользовательский интерфейс не обновляется в режиме реального времени?

Спасибо.

+1

Всякий раз, когда у меня была эта проблема, она всегда оказывалась чем-то невероятно простым, как плохой «IBOutlet» или «делегат». Вам не нужно 'setNeedsDisplay'. Вам не нужно «CATransaction». Можете ли вы выполнить некоторую дополнительную диагностику (например, зарегистрированный массив 'overlays'' _repMapView', когда вы все сделали, чтобы убедиться, что материал был добавлен, как вы думали, NSLog/breakpoint в 'viewForOverlay', чтобы увидеть, , посмотрите фактические значения широты/долготы). Вам нужно сужаться там, где это происходит. Если не считать ненужных вызовов, я не вижу ничего плохого в вашем коде, связанном с вашим MKMapView. – Rob

ответ

0

А, у меня был этот код внутри блока, который не вводился, потому что условие, которое я считал истинным, не было. Проверка того, что это не код карты, помогла мне определить эту самую основную несвязанную проблему. Благодарю.

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