私はジオフェンスを作成し、MKMapViewでそれらを表示し、それらを有効にしたり無効にしたりできる基本的なジオフェンスアプリケーションを構築しています。これはRay Wenderlichチュートリアルに基づいていますが、いくつかの点でそれを適用しました。つまり、私はレルムを使用してデータを保持しており、LocationManagerDelegateとして機能しLocationManagerを保持する別のLocationHandlerクラスを作成しました。一般に、私はいくつかの関数をviewControllerから別のクラスに移動しようとしました。シミュレータ(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 MKCircle
の{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
}
サブクラス はあなたの助け
編集いくつかのコードを追加するためにありがとう
class GeofenceRadiusCircle: MKCircle{
var geofence: Geofence?
var color: UIColor?
var id: String = ""
}
コンテキストがなくても何が起こっているのかを知ることは本当に不可能です。質問に関連するコードの部分を追加してください。 – JAL
非常に厳しいです。私は、オーディオに依存して構築しているアプリで、非常に似たような経験をしています。一見無作為にクラッシュしますが、シミュレータ上でのみクラッシュします。私の場合は、GCDを実装した方法と関係があることがわかります。私はGCDが実際のiPhoneとは違ってシミュレータ上で動作するのを読んで以来驚くことではありません – MikeG