2016-04-26 15 views
0

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 = "" 
} 
+0

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

+0

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

Antwort

0

Es scheint, als wäre es ein kleiner Fehler auf meiner Seite und vielleicht auch ein Fehler mit dem Simulator. Ich musste das alte Overlay entfernen, bevor es in ViewWillAppear zum Account neu gezeichnet wurde. Das schien die Overlay- und Annotationsprobleme zu lösen. Ich hatte auch ein Problem mit dem Benutzerstandort, der nicht immer in der MapView angezeigt wird, und das scheint nicht der Fall zu sein, wenn ich die App auf meinem Telefon ausführe.

Verwandte Themen