gpt4 book ai didi

ios - 仅当在 Swift 中获取所有记录时,如何才能将从 json 异步获取的记录添加到数组中?

转载 作者:行者123 更新时间:2023-11-28 08:44:44 31 4
gpt4 key购买 nike

我正在开发苹果 map 的市场集群(这里是插件 https://github.com/ribl/FBAnnotationClusteringSwift ),我想一次在我的 map 上显示所有记录 - 为此我需要从远程网络服务下载所有记录,添加它到 json(我已经这样做了),然后将所有获取的点添加到一个数组中。

我的代码是这样的:

let clusteringManager = FBClusteringManager()
var array:[FBAnnotation] = []

func loadInitialData() {
RestApiManager.sharedInstance.getRequests { json in
if let jsonData = json.array {
for requestJSON in jsonData {
dispatch_async(dispatch_get_main_queue(),{
if let request = SingleRequest.fromJSON(requestJSON){

let pin = FBAnnotation()
pin.coordinate = CLLocationCoordinate2D(latitude: request.latitude, longitude: request.longitude)
self.array.append(pin)

}
})
}
}
}
}

如您所见,我将所有 pin 附加到数组中,有时我需要在此处使用此数组:

self.clusteringManager.addAnnotations(array)

我以为我可以在我的方法 loadInitialData 的最后写上一行,但是数组仍然是空的。我应该如何更改我的代码,以便它在 array 填充数据时调用 addAnnotations 方法?

=== 编辑

只是一个小的添加 - 我在 viewDidLoad 中调用方法 loadInitialData

override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
loadInitialData()
}

最佳答案

您可能想使用NSOperation。它的 API 具有 addDependency(:) 方法,这正是您要找的。代码可能如下所示:

let queue = NSOperationQueue()
var operations : [NSOperation] = []
RestApiManager.sharedInstance.getRequests { json in
if let jsonData = json.array {
for requestJSON in jsonData {
let newOperation = NSBlockOperation {
SingleRequest.fromJSON(requestJSON){

let pin = FBAnnotation()
pin.coordinate = CLLocationCoordinate2D(latitude: request.latitude, longitude: request.longitude)
self.array.append(pin)

}
operations.append(newOperation)
}

}
}
let finalOperation = NSBlockOperation() {
///array has been populated
///proceed with it
}

operations.forEach { $0.addDependency(finalOperation) }
operations.append(finalOpeartion)
operationQueue.addOperations(operations)
}

关于ios - 仅当在 Swift 中获取所有记录时,如何才能将从 json 异步获取的记录添加到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35633199/

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