Поток 1: Неустранимая ошибка: Индекс выходит за пределы диапазона. Не получая значения из массива в swift, консоль показывает, что они не являются пустыми массивами
Я получаю:
Поток 1: Фатальная ошибка: Индекс вне диапазона
когда я вызываю функцию.
У меня есть функция, которая должна выполнять сравнение между значениями, хранящимися в 2 массивах CLLocation2D. Первый,trackingRouteArray
, получает CLLocation2D, добавляемый мониторингом положения пользователя. Второй, alertNotificationArray
, добавляется двойными касаниями, которые хранят CLLocation2D.
У меня есть два счетчика trackingCoordinatesArrayPosition
а также 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
}
}
}
Я получаю ошибку на let alertLatitude = alertNotificationArray[alertNotificationArrayPosition].latitude
линия
Это распечатки с консоли:
отслеживание остановлено
предупреждает координаты [__C.CLLocationCoordinate2D(широта: 37,333775436275886, долгота: -122,02368602396592), __C.CLLocationCoordinate2D (широта: +37,332980802736785, долгота: -122,02355882939459), __C.CLLocationCoordinate2D (широта: +37,333891009356435, долгота: -122,0235224889466), __C.CLLocationCoordinate2D (широта: +37,33415106952107, долгота: -122,02355883066487), __C.CLLocationCoordinate2D (широта: 37,334338890591638, долгота: -122,02332261163552), __C.CLLocationCoordinate2D (широта: 37,334598949139817, долгота: -122,02328627075829), __C.CLLocationCoordinate2D (широта: +37,335696975135136, долгота: -122,0236315182422)] координаты возможных маршрутов [__C.CLLocationCoordinate2D(широта: 37,333153109999998, долгота: -122,02360022000001), __C.CLLocationCoordinate2D (широта: +37,333184799999998, долгота: -122,02360543), __C.CLLocationCoordinate2D (широта: +37,333217210000001, долгота: -122,02360829), __C. CLLocationCoordinate2D (широта: 37,333247679999999, долгота: -1 22,02360903), __C.CLLocationCoordinate2D (широта: +37,333278159999999, долгота: -122,02360912), __C.CLLocationCoordinate2D (широта: 37,333308330000001, долгота: -122,02360862), __C.CLLocationCoordinate2D (широта: 37,333339840000001, долгота: -122,02360667000001), __C.CLLocationCoordinate2D (широта: 37,333372369999999, долгота: -122,02360458), __C.CLLocationCoordinate2D (широта: 37,333404880000003, долгота: -122,02360226), __C.CLLocationCoordinate2D (широта: 37,333437250000003, долгота: -122,02360114), __C.CLLocationCoordinate2D (широта: 37,333469319999999, долгота: -122,02360106), __C.CLLocationCoordinate2D (широта: +37,333500979999997, долгота: -122,0236012), __C.CLLocationCoordinate2D (широта: +37,333533869999997, долгота: -122,02360059999999), __C.CLLocationCoordinate2D (широта: 37,333567180000003, долгота: -122,02360006000001), __C.CLLocationCoordinate2D (широта: +37,333599149999998, долгота: -122.02359964999999), __C.CLLocationCoordinate2D (широта: 37.333630999999997, долгота: -122.0236005), __С, __C.CLLocationCoordinate2D (широта: +37,333768640000002, долгота: -122,0235964), __C.CLLocationCoordinate2D (широта: +37,333807470000004, долгота: -122,02359255), __C.CLLocationCoordinate2D (широта: 37,333850239999997, долгота: -122,02359082), __C.CLLocationCoordinate2D (широта: +37,333894520000001, долгота: -122.02358845000001), __C.CLLocationCoordinate2D (широта: 37.333937650000003, долгота: -122.02358579), __C.CLLocationCoordinate2D (широта: 37.333980240000002, долгота: -12224020000000000) 3500.CLLocationCoordinate2D (широта: 37.334073750000002, долгота: -122.02357465), __C.CLLocationCoordinate2D (la titude: +37,334120370000001, долгота: -122,0235716), __C.CLLocationCoordinate2D (широта: 37,334169469999999, долгота: -122,02356758000001), __C.CLLocationCoordinate2D (широта: 37,334220510000002, долгота: -122,02356580999999), __C.CLLocationCoordinate2D (широта: +37,334273039999999, долгота: -122,02356597000001), __С 37.334504440000003, долгота: -122.02357289), __C.CLLocationCoordinate2D (широта: 37.334565410000003, долгота: -122.02357538), __C.CLLocationCoordinate2D (широта: 37.33462555002: 3500): 2002- 2002: 2) 352, 2002): широта долготы: долгота широты __C.CLLocationCoordinate2D (широта: 37.334747299999997, долгота: -122.02357773), __С, долгота: -122.023573), __C.CLLocationCoordinate2D (широта: 37.335095870000004, долгота: -122.02356672000001), __C.CLLocationCoordinate2D (широта: 37.335175319999998, долгота: -122.022502: 352) 35005025250101).CLLocationCoordinate2D (широта: +37,335346260000001, долгота: -122,02352918), __C.CLLocationCoordinate2D (широта: 37,335435189999998, долгота: -122,02351114), __C.CLLocationCoordinate2D (широта: +37,335526700000003, долгота: -122,02348929), __C.CLLocationCoordinate2D (широта: +37,335615359999998, долгота: -122.02346115), __C.CLLocationCoordinate2D (широта: 37.335705070000003, долгота: -122.0234 2901999999), __С: 37,336079929999997, долгота: -122,02329487999999), __C.CLLocationCoordinate2D (широта: 37,336179360000003, долгота: -122,02327117), __C.CLLocationCoordinate2D (широта: 37,336281159999999, долгота: -122,02325363999999), __C.CLLocationCoordinate2D (широта: 37,3363838, долгота: -122,02324118999999), __C.CLLocationCoordinate2D (широта: 37.336481880000001, долгота: -122.02323437), __C.CLLocationCoordinate2D (широта: 37.336578070000002, долгота: -122.02323232000001), __C.CLLocation99992999969929999699599299599699599299699699699299699299699599699299699599599599699699299 (())99992999999996992995995995992995995992995992995992996995996995996995996992995996: координаты: 399999999999999999999999999999999999999999999999999999999999999999999999999999900
(Lldb)`
а также
self fix_it_mapView.MapViewController 0x00007fb37980b000 trackingLatitude CLLocationDegrees 37.333153109999998 trackingLongitude CLLocationDegrees -122.02360022000001 alertLatitude CLLocationDegrees alertLongitude CLLocationDegrees
Функция откуда 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()
}
1 ответ
Приведенный ниже код, вероятно, является проблемой, поскольку он позволяет alertNotificationArrayPosition
подняться, чтобы быть равным alertNotificationArray.count
что будет означать индекс вне диапазона ошибки,
else if alertNotificationArrayPosition < alertNotificationArray.count {
alertNotificationArrayPosition = alertNotificationArrayPosition + 1
}
Я также думаю, что условие while выглядит очень странно, когда вы используете !=
скорее, чем <
или же <=