Добро пожаловать в Stackoverflow! Ошибка:
Неустранимая ошибка: индекс вне диапазона: файл /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-1103.2.25.13/swift/stdlib/public/core/ ContiguousArrayBuffer.swift, строка 444 2020-08-02 03:04: 18.896635-0700 Расписание [44839: 2131710] Неустранимая ошибка: индекс вне допустимого диапазона: файл /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang- 1103.2.25.13/swift/stdlib/public/core/ContiguousArrayBuffer.swift, строка 444
просто означает, что вы обращаетесь к индексу массива, но этот индекс больше максимального индекса массива.
Как вы уже знаете, доступ к массиву начинается с 0. Получение индекса из IndexPath
осуществляется через row
или item
и section
. Максимальный индекс массива можно получить через счетчик вашего массива данных минус 1.
Из того, что я вижу, как и то, что вы упомянули, у вас есть два разных типа клеток. То, как вы обрабатываете это в своем cellForRow
, может быть правильным, но значение, которое вы передаете в numberOfRowsInSection
, слишком велико, вы объединяете количество ваших обоих массивов.
return (myContact.count + contactsAry.count)
Сумма - 1 будет максимальной. indexPath.row
ваш tableView будет пытаться получить доступ, следовательно, cra sh (вне диапазона).
Один из способов решить эту проблему - использовать раздел. Например, вы можете сделать это:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return myContact.count
} else {
return contactsAry.count
}
}
, и для этого вам понадобится другой метод numberOfSections
.
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
И оттуда обрабатывать разделы и строки таким же образом в вашем cellForRow
. Вы можете взять его отсюда.