我正在構建一個基本的地理柵欄應用程序,允許用戶創建地理圍欄,在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 = ""
}
如果沒有更多的上下文,真的不可能知道發生了什麼。請將您代碼的相關部分添加到您的問題中。 – JAL
很難說。我在構建依賴音頻的應用程序中擁有非常相似的體驗。它會看起來隨機崩潰,但只在模擬器上。就我的情況而言,我知道這與我實施GCD的方式有關。這並不奇怪,因爲我已經讀過GCD在模擬器上的工作方式與實際iPhone上的不同 – MikeG