Я создаю базовое приложение 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 = ""
}
Это действительно невозможно узнать, что происходит без лишнего контекста. Пожалуйста, добавьте соответствующие части кода в свой вопрос. – JAL
Очень сложно сказать. У меня очень похожий опыт в приложении, которое я создаю, которое опирается на аудио. Он будет казаться случайным, но ТОЛЬКО на симуляторе. По моему делу, я знаю, что это связано с тем, как я реализовал GCD. Не удивительно, поскольку я прочитал, что GCD работает по-разному на симуляторе, чем на самом iPhone – MikeG