如何将 MKAnnotation 添加到领域 [关闭]

Posted

技术标签:

【中文标题】如何将 MKAnnotation 添加到领域 [关闭]【英文标题】:How to add MKAnnotation to realm [closed] 【发布时间】:2022-01-07 01:29:54 【问题描述】:

我正在尝试将 MKAnnotation 添加到 Realm。

这是我的对象和我尝试过的:

class pins: Object 
    @objc dynamic var pin: MKAnnotation!


struct pin 
    static var pin: MKAnnotation!

我将我的静态添加到一个函数并使用 realm.beginWrite() 等来添加注释。

错误:

线程1:“属性pins.pin被声明为可选, 这不是受支持的托管对象属性类型。

如果有人知道如何在 Realm 中存储 MKAnnotation 或知道我做错了什么,请告诉我:D。

【问题讨论】:

当然 - MKAnnotation 不支持 Realm 属性,因此它不能由 Realm 管理。见Supported Property Types。 【参考方案1】:

MKAnnotation 不是受支持的 Realm 属性,因此它不能由 Realm 管理。见Supported Property Types。

因此,使用 MKAnnotations 的方法是将其分解为 Realm 可以管理的对象(也称为原语);字符串、数字等

MKAnnotation 是一个协议,所以我们首先需要一个对象来存储该数据

class MyAnnotation: NSObject, MKAnnotation 
    var coordinate: CLLocationCoordinate2D
    var phone: String!
    var name: String!
    var address: String!
    var image: UIImage!

    convenience init(lat: Double, lon: Double, phone: String, name: String, addr: String, image: UIImage 
       let coord = CLLocationCoordinate2DMake(lat, long)
       self.coordinate = coord
       self.phone = phone
       etc
    

并将您的纬度和经度作为 Double 存储在 Realm 中。

一种选择是使用包含坐标数据的领域对象

class MyCoords: Object 
   @objc dynamic var lat = 0.0   //or @Persisted var lat = 0.0 Realm 10.0
   @objc dynamic var long = 0.0
   @objc dynamic var phone = ""
   etc

然后读入这些对象并根据该数据实例化您的 MKAnnotation 对象。

let myCoordResults = realm.objects(MyCoords.self)

for coord in myCoordResults 
   let annotation = MyAnnotation(lat: coord.lat, long: coord.long...
   // do something with the annotation

【讨论】:

以上是关于如何将 MKAnnotation 添加到领域 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

MKAnnotation 的自定义图像

Swift 中的自定义 MKAnnotation 未添加到地图的注释中

从 Parse 中查询 GeoPoint 并将其作为 MKAnnotation 添加到 MapKit?

MKAnnotationView 正在失去对 MKAnnotation 的引用

如何将 MKAnnotation Pin 一个一个丢掉?

在实现 MKAnnotation 时如何获取 pin 的标题和副标题?