gpt4 book ai didi

ios - Swift 添加对象数组作为 map 注释

转载 作者:行者123 更新时间:2023-11-28 12:52:21 25 4
gpt4 key购买 nike

我有一个从我的 CloudKit 数据库中获取的对象数组,这些对象作为一个 location() 对象数组返回。

location() 定义为...

class location {
var title: String?
var subtitle: String?
var coordinate: CLLocationCoordinate2D
}

我需要能够从数组创建注释,但我似乎无法理解它。

当我尝试将数组作为 MKAnnotation 传递时,它说它没有正确符合,尽管它确实具有符合要求的所有数据,但我只是想不出如何将它从数组中取出并进入注释。

我的类(class)

class Locations: NSObject, MKAnnotation {
var title: String?
var subtitle: String?
var coordinate: CLLocationCoordinate2D

override init()
{
self.title = "Test Title"
self.subtitle = "Test Subtitle"
self.coordinate = CLLocationCoordinate2D.init()
}
}

在我的 View Controller 中创建了“对象”... var objects = [Locations]()

这是我用来从 CK 获取数据并将其存储在对象中的功能的一部分 ...

for locations in results! {
let newLocation = Locations()
newLocation.title = ckData["Name"] as? String
newHaunted.subtitle = ckData["Subtitle"] as? String
let location = ckData["Location"] as! CLLocation

self.objects.append(newLocation)

最后,我在 ViewDidAppear 中调用了一个具有以下代码的函数...

    let locationsToAdd = objects
mapView.showAnnotations(locationsToAdd, animated: true)

此时我从对象中得到一个空数组。如果我尝试使用 Locations() 而不是对象,它会说它无法将其转换为 MKAnnotation,它应该已经是了。

以下是我用来从 CloudKit 获取数据的函数。

func getRecordsFromCloud() {
// Fetch data using Convenience API
let cloudContainer = CKContainer.defaultContainer()
let publicData = cloudContainer.publicCloudDatabase
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Locations", predicate: predicate)

publicData.performQuery(query, inZoneWithID: nil) { results, error in
if error == nil { //no error
for locations in results! {
let newLocation = Locations()
newLocation.title = locations["Name"] as? String
newLocation.subtitle = locations["Subtitle"] as? String
let location = locations["Location"] as! CLLocation

let newLocationCoords: CLLocationCoordinate2D = location.coordinate
newLocation.coordinate = newLocation
self.objects.append(newHaunted)


dispatch_async(dispatch_get_main_queue(), {() -> Void in
self.locationsTable.reloadData()
})
}
}
else {
print(error)
}
}
}

在此之后,我在 viewDidLoad 中调用 getRecordsFromCloud()。

最佳答案

要指定您的类符合特定协议(protocol),您必须使用 class ClassName: ProtocolName 表示法。因此,在您的情况下,您应该将 class location 替换为 class location: MKAnnotation 以告诉编译器您的类符合 MKAnnotation 协议(protocol)。

关于ios - Swift 添加对象数组作为 map 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36107290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com