2013-02-25 66 views
1

我正在創建一個應用程序,它可以爲美國各地的任何可用用戶發送呼叫請求,並在此期間通過地圖疊加和進度條更新進度調用發件人。出於某種原因,無論我嘗試使用Grand Central Dispatch,CATransaction等嘗試什麼技巧,地圖和進度條都不會更新到最後一步。請注意,我在使用Parse作爲後端並在獲得後在塊中完成操作目的。iOS地圖覆蓋不更新

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;被設置在地圖視圖的初始繪圖中。

我在這裏丟失了一些明顯的東西,導致UI無法實時更新嗎?

謝謝。

+1

每當我遇到這個問題時,它總是變得非常簡單,就像一個糟糕的'IBOutlet'或'委託'一樣。你不需要'setNeedsDisplay'。你不需要'CATransaction'。你可以做一些add'l診斷(例如,當你完成所有工作以確保東西已經按照你的想法添加時,記錄'_repMapView'的'overlays'數組;'viewForOverlay'中的NSLog /斷點,看看它是否被調用;查看實際的緯度/經度值)。你需要縮小它出錯的地方。在一些不必要的調用之後,我發現你的'MKMapView'相關代碼沒有問題。 – Rob 2013-02-25 18:50:15

回答

0

啊,我沒有輸入一個塊內的代碼,因爲我假設爲真的條件不是。驗證它不是地圖代碼幫助我確定了這個非常基本的無關問題。謝謝。