2016-04-26 8 views
0

私はジオフェンスを作成し、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 = "" 
} 
+0

コンテキストがなくても何が起こっているのかを知ることは本当に不可能です。質問に関連するコードの部分を追加してください。 – JAL

+0

非常に厳しいです。私は、オーディオに依存して構築しているアプリで、非常に似たような経験をしています。一見無作為にクラッシュしますが、シミュレータ上でのみクラッシュします。私の場合は、GCDを実装した方法と関係があることがわかります。私はGCDが実際のiPhoneとは違ってシミュレータ上で動作するのを読んで以来驚くことではありません – MikeG

答えて

0

それは私の側に少しのエラーと思われ、またシミュレータのエラーかもしれないようです。 viewWillAppearで再描画する前に、古いオーバーレイを削除する必要がありました。それはオーバーレイと注釈の問題を解決するように思えました。私はまた、mapViewですべての時間を表示していないユーザーの場所に問題があり、それは私の携帯電話でアプリを実行する場合はそうではないようです。

関連する問題