我有一个跟踪器应用程序,它从服务器抓取数据,所以我写了这个请求:
internal func updateOnlineTrack(for track: Track,
success: @escaping ((Track) -> Swift.Void),
failure: @escaping ((ServerRequestError?) -> Swift.Void)) {
let url = BaseURL.ver_2 + "tracks/points/new"
let parameters: Parameters = ["token" : ServerManager.manager.verification.token,
"data" : "\(track.id),\(track.sLastId)"]
Alamofire.request(url, parameters: parameters).responseJSON { response in
switch response.result {
case .success(let value):
let responseJSON = JSON(value)
print("NEW POINTS \n\(responseJSON)")
if let points = responseJSON["\(track.id)"]["points"].arrayObject {
for point in points {
guard let newPoint = Track.Point(withResponseObject: point as? [AnyObject]) else { return }
track.points?.append(newPoint)
}
track.sLastId = responseJSON["\(track.id)"]["last_id"].stringValue
}
success(track)
case .failure(let error):
failure(ServerRequestError(code: 0, message: error.localizedDescription))
print(ServerRequestError(code: 0, message: error.localizedDescription))
}
}
它基本上抓取新数据并将其附加到一个新的所谓“轨道”
问题是我应该在哪里调用此方法来不断使用新数据更新我的地图?在viewDidLoad中尝试使用计时器,但没有运气
图片用于说明正在发生的事情。我有可以转换为CLLocationCoordinates的坐标,但是如何将它附加到现有路线?
答案 0 :(得分:1)
您不必在viewDidAppear
或更进一步延迟请求,因为viewDidLoad
中的放置函数调用在加载数据期间是最佳的,视图将正确呈现显示所以检查repeats:true
的计时器,并且关于追加,您可以保存绘制路径中的最后一个点,并将其挂钩到您从响应中获得的第一个点,并将新的折线添加到地图