Ich erstelle eine grundlegende Geofence-App, mit der Benutzer Geofences erstellen, sie auf einem MKMapView anzeigen und aktivieren und deaktivieren können. Es basiert auf dem Ray Wenderlich Tutorial, aber ich habe es auf verschiedene Arten angepasst. Ich verwende Realm, um Daten persistent zu machen, und ich habe eine separate LocationHandler-Klasse erstellt, die als LocationManagerDelegate fungiert und einen LocationManager enthält. Im Allgemeinen habe ich versucht, einige Funktionen aus ViewControllern und in separaten Klassen zu verschieben.Inkonsistente Ergebnisse im Simulator (iOS)?
Alles scheint zu funktionieren, außer periodisch Karten Annotationen und Overlay werden nicht korrekt im Simulator gerendert. Ungefähr 20% der Zeit werden Anmerkungen und Überlagerungen nicht entfernt, wenn sie es sein sollten. Oder Farben ändern sich nicht so, wie sie sollten. Oder ein kreisförmiges Overlay ändert die Farben, aber der zugehörige Pin wird nicht angezeigt.
Liegt dies an einem Fehler in meinem Code oder ist dies ein Artefakt bei der Verwendung eines Simulators? Vielen Dank für Ihre Hilfe
bearbeiten einige Code hinzuzufügen: In-View-Controller
//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
}
}
}
}
}
Unterklasse von MKAnnotation Klasse GeofenceAnnotation: 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
}
Unterklasse von MKCircle
class GeofenceRadiusCircle: MKCircle{
var geofence: Geofence?
var color: UIColor?
var id: String = ""
}
Es ist wirklich unmöglich zu wissen, was ohne mehr Kontext vor sich geht. Bitte füge die relevanten Teile deines Codes zu deiner Frage hinzu. – JAL
Sehr schwer zu sagen. Ich habe sehr ähnliche Erfahrungen in einer App, die ich auf Audio aufbaue. Es wird scheinbar zufällig, aber NUR auf dem Simulator zusammenbrechen. In meinem Fall weiß ich, dass es etwas damit zu tun hat, wie ich GCD implementiert habe. Kein Wunder, seit ich gelesen habe, dass GCD auf dem Simulator anders funktioniert als auf dem eigentlichen iPhone – MikeG