【发布时间】:2017-02-06 20:47:43
【问题描述】:
在我的swift 应用程序中,我在UITableView 中显示单元格,前10 个单元格包含一张照片。我决定为每个单元格添加视差效果,这样当用户上下滚动表格时 - 图像会改变它的偏移量。
这是我从我的网络服务中获取数据并最初将其添加到 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) 返回 nil?
【问题讨论】:
-
请同时放上cellForRow方法的代码
-
cellForRow(at:)如果单元格不可见或 indexPath 超出范围,则返回nil。 -
@KuntalGajjar 我检查了
cellForRow根本没有被调用,我在第一行添加了一个print消息,但它没有出现。问题在于这一行:self.tview.cellForRow(at: indexPath) as! BigDetailsOnListCell,因为nil不能转换为BigDetails...。我想那是因为我的手机不见了,但我不确定我在哪一点删除它们 -
在拉取刷新数据之前,您的刷新控件是否调用 endRefreshing?我的想法是它可能是因为它被称为异步。编辑:当您的表格视图在刷新后向上移动时,滚动视图确实会调用滚动。
标签: ios swift uitableview swift3 tableviewcell