【问题标题】:Deleting core data object based on MKAnnotion基于 MKAnnotion 删除核心数据对象
【发布时间】:2017-06-16 00:17:28
【问题描述】:

我正在基于 coredata 将注释存储并加载到地图上。

我不确定如何点击注释并删除该引脚的核心数据。

与 tableview 不同,没有真正的 indexPath 可以从我的 fetched objects 数组中删除。我能想到的在屏幕上跟踪我的注释的唯一方法是给它们一个标签并将其与我获取的结果数组对齐,但我觉得必须有更好的方法。

我知道如何实现对 pin 的点击,但是一旦我选择了 pin,我如何将它与创建它的 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)
    }

【问题讨论】:

    标签: ios swift core-data mkannotation


    【解决方案1】:

    解决您的问题的一种方法是创建一个符合 MKAnnotation 的类,该类包含对您的核心数据对象 (NSManagedObjectID) 的引用。当您选择 pin 时,您将有权访问此对象,因此您可以使用核心数据对象 ID 来获取对象并将其删除。

    [managedObjectContext existingObjectWithID:objectID error:nil];

    `final class 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
    }
    

    } `

    【讨论】:

    • 我什至不知道 ObjectID 是一回事。这是完美的,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 2012-06-17
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多