2016-04-26 2 views
0

Я создаю базовое приложение geofence, которое позволяет пользователям создавать геообъекты, просматривать их на MKMapView и активировать и дезактивировать их. Он основан на учебнике Ray Wenderlich, но я адаптировал его несколькими способами. А именно, я использую Realm для сохранения данных, и я создал отдельный класс LocationHandler, который действует как LocationManagerDelegate и содержит LocationManager. Как правило, я пытался переместить некоторые функции из viewControllers и в отдельные классы.Непоследовательные результаты в симуляторе (iOS)?

Кажется, что все работает, за исключением того, что периодически аннотации и наложение карт не отображаются правильно в симуляторе. Около 20% времени аннотации и наложения не будут удалены, когда они будут. Или цвета не будут меняться так, как должны. Или круговое наложение изменит цвета, но связанный контакт не будет.

Это из-за некоторой ошибки в моем коде или это артефакт использования симулятора? Спасибо за вашу помощь

Изменить, чтобы добавить код: В видовом контроллере

//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 
        } 
       } 
      } 
     } 
    } 

подкласс MKAnnotation класса 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 
    } 

подкласс MKCircle

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

Это действительно невозможно узнать, что происходит без лишнего контекста. Пожалуйста, добавьте соответствующие части кода в свой вопрос. – JAL

+0

Очень сложно сказать. У меня очень похожий опыт в приложении, которое я создаю, которое опирается на аудио. Он будет казаться случайным, но ТОЛЬКО на симуляторе. По моему делу, я знаю, что это связано с тем, как я реализовал GCD. Не удивительно, поскольку я прочитал, что GCD работает по-разному на симуляторе, чем на самом iPhone – MikeG

ответ

0

Кажется, что это была небольшая ошибка на моей стороне, а также, возможно, ошибка с симулятором. Мне нужно было удалить старый оверлей, прежде чем перерисовывать в viewWillAppear для учетной записи. Это, казалось, решало проблемы наложения и аннотации. У меня также была проблема с местоположением пользователя, которое не отображается все время в mapView, и, похоже, это не так, когда я запускаю приложение на своем телефоне.

Смежные вопросы