В моем приложении swift
я показываю ячейки в UITableView
, первые 10 ячеек содержат фотографию. Я решил добавить эффект параллакса для каждой ячейки, так что когда пользователь прокручивает таблицу вверх и вниз, изображение меняет его смещение.cellForRow (at: indexPath) возвращает nil и сбой моего быстрого приложения
Это, как я получить данные из моего веб-сервиса и первоначально добавьте его в Tableview:
func makePostQueryForFetchingData(_ parameters: [String:AnyObject], url: String, type: String)
{
Alamofire.request(url, method: .post, parameters: (parameters), encoding: JSONEncoding.default)
.validate()
.responseJSON { response in
switch response.result {
case .success:
DispatchQueue.main.async(execute: {
items.removeAllObjects()
tview.reloadData()
if let jsonData = response.result.value as? [[String: AnyObject]] {
for singleJSON in jsonData {
if let single = SingleNode.fromJSON(JSON(singleJSON)){
self.items.add(single)
}
}
}
self.refreshController.endRefreshing()
print("before crash")
self.tview.reloadData()
print("end")
})
case .failure(let error):
print(error)
}
}
}
Когда я запускаю эту функцию при запуске - все работает хорошо. Однако, если я прокручиваю вниз по таблице, а затем быстро прокручиваю вверх и вытягиваю, чтобы обновить - приложение вылетает.
В попытке обновления я вызываю функцию сверху.
Функция для обработки эффекта параллакса выглядит следующим образом:
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (scrollView == self.tview) {
for indexPath in self.tview.indexPathsForVisibleRows! {
if (indexPath.row < 10) {
print(indexPath)
print(self.tview.cellForRow(at: indexPath))
self.setCellImageOffset(cell: self.tview.cellForRow(at: indexPath) as! BigDetailsOnListCell, indexPath: indexPath as NSIndexPath)
}
}
}
}
, и я понял, что, когда я быстро прокручивать таблицу и обновляет его - я вижу в консоли:
before crash
0
nil
fatal error: unexpectedly found nil while unwrapping an Optional value
так почему же self.tview.cellForRow(at: indexPath)
возвращает ноль?
Пожалуйста, также введите код метода cellForRow –
'cellForRow (at:)' возвращает 'nil', если ячейка не видна или indexPath выходит за пределы допустимого диапазона. – JAL
@KuntalGajjar Я проверил, что 'cellForRow' вообще не вызывается, я добавил« print' msg на первой строке там, и он не появился. Проблема заключается в этой строке: 'self.tview.cellForRow (at: indexPath) как! BigDetailsOnListCell', потому что 'nil' не может быть передан в' BigDetails ... '. Я думаю, что это потому, что моя ячейка отсутствует, но я не уверен, в какой момент я их удаляю. – user3766930