私はアプリケーションを作成しています。ボタンをクリックすると、すべてのユーザーと推定されたETAでtableviewが作成されます。ユーザーをループしてその場所を取得しても、同じ順序で配列を作成するわけではありません。したがって、そのループスルーと時間がすべて混在するようになります。私はそれらを介してループのいくつかの異なる方法を試してみましたが、それは遅延され、異なる時に実行されますdirections.calculateETAセクションを取得するように思えます。誰も私がこれを効率的に実行できるようにループが順不同で実行されないようにすることはできますか?Apple Mapkit calculateETAWithCompletionHandler loop through array
for user in usersArray {
var userLocations:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: user["location"].latitude, longitude: user["location"].longitude)
ETARequest(userLocations)
}
func ETARequest(destination:CLLocationCoordinate2D) {
let request = MKDirectionsRequest()
if let currentLocation = self.manager.location?.coordinate {
request.source = MKMapItem(placemark: MKPlacemark(coordinate: currentLocation, addressDictionary: nil))
request.destination = MKMapItem(placemark: MKPlacemark(coordinate: destination, addressDictionary: nil))
request.transportType = .Automobile
let directions = MKDirections(request: request)
directions.calculateETAWithCompletionHandler({ (response, error) in
if error == nil {
if let interval = response?.expectedTravelTime {
print(self.formatTimeInterval(interval))
self.durationArray.insert(self.formatTimeInterval(interval), atIndex: 0)
if self.durationArray.count == self.allUsers.count {
print(self.durationArray)
self.tableView.reloadData()
}
}
} else {
print("Error Occurred")
}
})
}
}
意味があります。私はそれを試し、あなたに知らせるでしょう。ありがとう! –
これはすごくうまくいった。私はカスタムクラスを作成しました。私のデータベースからダウンロードしたユーザーの配列。私のデータベースの各ユーザについて、自分のカスタムクラスに情報を追加しました。 user.name user。場所 user.toUserDistance 私はそれらをループして、User:UserType関数にユーザーを割り当てました。完璧に働いた! –