2016-04-26 53 views
0

我正在構建一個基本的地理柵欄應用程序,允許用戶創建地理圍欄,在MKMapView上查看它們,並激活和停用它們。它基於Ray Wenderlich教程,但我已經通過幾種方式進行了調整。也就是說,我使用Realm來保存數據,並且創建了一個單獨的LocationHandler類,它充當LocationManagerDelegate並保存LocationManager。一般來說,我試圖將一些功能從viewControllers中移出並分成不同的類。模擬器(iOS)中的結果不一致?

一切似乎工作,除了週期性地圖註釋和覆蓋在模擬器中無法正確呈現。大約20%的時間註釋和覆蓋將不會被刪除,當他們應該。或者,顏色不會像他們應該改變的那樣。或者,圓形覆蓋圖會改變顏色,但相關的引腳不會。

這是由於我的代碼中的一些錯誤,或者這是使用模擬器的人工製品? 感謝您的幫助

編輯添加一些代碼: 在視圖控制器MKAnnotation 類GeofenceAnnotation的

//Clicking the 'x' deletes the geofence 
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView,  calloutAccessoryControlTapped control: UIControl) { 

     let anAnnotation = view.annotation as! GeofenceAnnotation 
     let geofence = anAnnotation.geofence 

     //stop monitoring geofence 
     locationManager.stopMonitoringGeofence(geofence!) 

     //remove representation of geofence from map 
     removeGeofenceRadiusCircle((geofence?.identifier)!) 
     mapView.removeAnnotation(anAnnotation) 


     //delete geofence from realm 
     try! realm.write { 
      realm.delete(geofence!) 
     } 
     updateGeofenceCount() 
    } 
//Go through all overlays and remove appropriate one 
    func removeGeofenceRadiusCircle(id: String) { 
     self.mapView.delegate = self 
     if let overlays = mapView?.overlays { 
      for ol in overlays { 
       if let circleOverlay = ol as? GeofenceRadiusCircle { 
        let aId = circleOverlay.id 
        if aId == id { 
         mapView?.removeOverlay(circleOverlay) 
         break 
        } 
       } 
      } 
     } 
    } 

子類:NSObject的,MKAnnotation {

var coordinate: CLLocationCoordinate2D 
    var title: String? 
    var subtitle: String? 
    var geofence: Geofence? 

    init(coordinate: CLLocationCoordinate2D, title: String, subtitle: String, geofence: Geofence? = nil) { 
     self.coordinate = coordinate 
     self.title = title 
     self.subtitle = subtitle 
     self.geofence = geofence 
    } 

MKCircle

的子類
class GeofenceRadiusCircle: MKCircle{ 
    var geofence: Geofence? 
    var color: UIColor? 
    var id: String = "" 
} 
+0

如果沒有更多的上下文,真的不可能知道發生了什麼。請將您代碼的相關部分添加到您的問題中。 – JAL

+0

很難說。我在構建依賴音頻的應用程序中擁有非常相似的體驗。它會看起來隨機崩潰,但只在模擬器上。就我的情況而言,我知道這與我實施GCD的方式有關。這並不奇怪,因爲我已經讀過GCD在模擬器上的工作方式與實際iPhone上的不同 – MikeG

回答

0

這似乎是我身邊的一點點錯誤,也可能是模擬器的錯誤。在重新繪製viewWillAppear之前,我需要刪除舊的覆蓋圖。這似乎解決了重疊和註釋問題。我也遇到了一個問題,即用戶位置並未在mapView中始終顯示,而且在我的手機上運行應用程序時似乎不是這種情況。