Ios 线程1:致命错误:索引超出范围。在swift中没有从数组中获取值,控制台显示它们';我们不是空数组
我得到一个: 线程1:致命错误:索引超出范围 当我调用函数时 我有一个函数,它应该在存储到2个CLLocation2D数组中的值之间执行比较。第一个,Ios 线程1:致命错误:索引超出范围。在swift中没有从数组中获取值,控制台显示它们';我们不是空数组,ios,arrays,swift,Ios,Arrays,Swift,我得到一个: 线程1:致命错误:索引超出范围 当我调用函数时 我有一个函数,它应该在存储到2个CLLocation2D数组中的值之间执行比较。第一个,trackingRouteArray,通过监视用户位置获取附加的CLLocation2D。第二个,alertNotificationArray,由存储CLLocation2D的双击追加 我有两个计数器跟踪坐标ArrayPosition和alertNotificationArrayPosition,用于增加数组位置以从中获取值 现在我的问题是,tra
trackingRouteArray
,通过监视用户位置获取附加的CLLocation2D。第二个,alertNotificationArray
,由存储CLLocation2D的双击追加
我有两个计数器跟踪坐标ArrayPosition
和alertNotificationArrayPosition
,用于增加数组位置以从中获取值
现在我的问题是,trackingRouteArray
在我参考其位置时有一个值,但是alertNotificationArray
没有。
在控制台中,我打印了两个数组,它们都填充了值
代码如下:
func checkAlerts() {
while trackingCoordinatesArrayPosition != ( (trackingCoordinatesArray.count) - 1) {
let trackingLatitude = trackingCoordinatesArray[trackingCoordinatesArrayPosition].latitude
let trackingLongitude = trackingCoordinatesArray[trackingCoordinatesArrayPosition].longitude
let alertLatitude = alertNotificationArray[alertNotificationArrayPosition].latitude
let alertLongitude = alertNotificationArray[alertNotificationArrayPosition].longitude
if trackingLatitude == alertLatitude && trackingLongitude == alertLongitude {
// do something
print( "found problem")
}
else if alertNotificationArrayPosition < alertNotificationArray.count {
alertNotificationArrayPosition = alertNotificationArrayPosition + 1
}
else if alertNotificationArrayPosition == alertNotificationArray.count {
trackingCoordinatesArrayPosition = ( trackingCoordinatesArrayPosition + 1)
alertNotificationArrayPosition = 0
}
}
}
调用函数wherecheckAlerts()
在调用它之前会打印数组,但似乎调用是在调用之前执行的,我无法确定它是否是打字错误
func stopTracking() {
locationManager.stopUpdatingLocation()
let duration = daysLasted(start: dateStart, end: Date())
print("tracking stopped")
self.dataReceived = "bici rubata"
self.endTrackingPoint.coordinate = (locationManager.location?.coordinate)! // gets courrent user location and store it into end tracking point
self.trackingRoute.append(self.endTrackingPoint) // append end poit to route array
mapView.showAnnotations(trackingRoute, animated: true) // shows start and end ponits only
drawRoutePolyline() //draw route
print("alerts coordinates are\(alertNotificationArray)")
print("route coordinates are\(trackingCoordinatesArray)")
checkAlerts()
}
下面的代码可能是问题所在,因为它允许
alertNotificationArrayPosition
上升到等于AlertNotificationArrayCount
,这意味着索引超出范围错误
else if alertNotificationArrayPosition < alertNotificationArray.count {
alertNotificationArrayPosition = alertNotificationArrayPosition + 1
}
else如果alertNotificationArrayPosition
我还认为当您使用
时,while条件看起来非常奇怪=代码>而不是是。。这就是问题所在,如果alertNotificationArrayPosition<((AlertNotificationArrayCount)-1{alertNotificationArrayPosition=alertNotificationArrayPosition+1}
我忘记了如果else
语句中的-1。那个!=这不是一个问题,我只是使用它来避免输入错误,因为>=而不是使用距离(from:coordinate)
方法解决检查部分,并检查该距离是否正确
else if alertNotificationArrayPosition < alertNotificationArray.count {
alertNotificationArrayPosition = alertNotificationArrayPosition + 1
}