2017-06-16 5 views
0

私はコアデータに基づいてアノテーションをマップに保存して読み込みます。MKAnnotionに基づくコアデータオブジェクトを削除する

アノテーションをタップし、そのピンのコアデータを削除する方法についてはわかりません。

テーブルビューとは異なり、フェッチされたオブジェクト配列から削除する実際のindexPathはありません。私が注釈を画面上で追跡することを考える唯一の方法は、すべてのタグと行に私の取得した結果配列を与えることですが、よりよい方法が必要だと感じています。

私はピンにタップを実装する方法を知っていますが、一度そのピンが選択されると、それを作成したcoredataオブジェクトでどのように結び付けますか?あなたの問題を解決するため

func loadPins(){ 
     let pinRequest : NSFetchRequest<Pin> = Pin.fetchRequest() 
     do { 
      pins = try managedObjectContext.fetch(pinRequest) 
     } catch { 
      print("There was en error fetching pins") 
     } 
     for pin in pins { 
      let lat = pin.latitude 
      let lon = pin.longitude 
      let coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon) 
      createAnnotation(coordinate: coordinate) 
     } 
    } 



func createAnnotation(coordinate : CLLocationCoordinate2D){ 
     let annotation = MKPointAnnotation() 
     annotation.coordinate = coordinate 
     annotation.title = "henlo" 
     map.addAnnotation(annotation) 
    } 

答えて

1

一つの方法は、あなたのコアデータオブジェクト(NSManagedObjectID)への参照を保持しているMKAnnotationに準拠したクラスを作成することです。ピンを選択すると、このオブジェクトにアクセスできるようになります。したがって、オブジェクトを保持して削除するために使用できるコアデータオブジェクトIDが得られます。

[managedObjectContext existingObjectWithID:objectID error:nil];

`finalクラスのMapViewAnnotation:NSObjectの、MKAnnotation {

let NSManagedObjectID: objectID 
let coordinate: CLLocationCoordinate2D 
let title: String? 
let subtitle: String? 

init(objectID: NSManagedObjectID, coordinate: CLLocationCoordinate2D, title: String?=nil, subtitle: String?=nil) { 
    self.objectID = objectID 
    self.coordinate = coordinate 
    self.title = title 
    self.subtitle = subtitle 
} 

} `

+0

私ものObjectIDのを知らなかった事でした。これは完璧です、ありがとう! – user6820041

関連する問題