Ios 线程1:致命错误:索引超出范围。在swift中没有从数组中获取值,控制台显示它们';我们不是空数组

Ios 线程1:致命错误:索引超出范围。在swift中没有从数组中获取值,控制台显示它们';我们不是空数组,ios,arrays,swift,Ios,Arrays,Swift,我得到一个: 线程1:致命错误:索引超出范围 当我调用函数时 我有一个函数,它应该在存储到2个CLLocation2D数组中的值之间执行比较。第一个,trackingRouteArray,通过监视用户位置获取附加的CLLocation2D。第二个,alertNotificationArray,由存储CLLocation2D的双击追加 我有两个计数器跟踪坐标ArrayPosition和alertNotificationArrayPosition,用于增加数组位置以从中获取值 现在我的问题是,tra

我得到一个:

线程1:致命错误:索引超出范围

当我调用函数时

我有一个函数,它应该在存储到2个CLLocation2D数组中的值之间执行比较。第一个,
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
        }
    }
}
调用函数where
checkAlerts()
在调用它之前会打印数组,但似乎调用是在调用之前执行的,我无法确定它是否是打字错误

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
 }