我正在调用以下方法将UITableViewController滚动到顶部。
func scrollTableToTop() {
tableView.scrollRectToVisible(CGRectMake(0, 0, 1, 1), animated: true)
}
我在这个函数中尝试了几行代码,并且所有代码都返回相同的错误,这是我无法理解的。
以下是完整错误:
Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit/UIKit-3347.44/UITableView.m:6245
此网站列出的类似错误似乎会导致应用在加载任何单元格之前崩溃。但是我的tableView在加载单元格时功能齐全。该错误使应用程序完全正常运行,但不会滚动到顶部。
由于点击状态栏成功地将UITableViewController以我想要的确切行为滚动到顶部这一事实引起了更多的混淆,但我创建的函数将无法运行。
修改:
根据要求,以下是我的scrollTableToTop()
方法的调用方式。
在连接到我的tabBarController的.swift文件中:
class tabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
//Scroll to top when tab is pressed
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
if homeIsCurrentlyVisible == true {
println("Should scroll home-page to top")
homeTableViewController().scrollTableToTop()
}
}
homeIsCurrentlyVisible
是在true
出现时设置为homeTableViewController
的通用变量,当false
消失时设置为homeTableViewController
。 dequeueReusableCellWithIdentifier:forIndexPath:
是需要滚动到顶部的tableView。
编辑2:
我有一些见解!我重新搜索stackoverflow以查找此错误,即使这些帖子似乎与我的问题无关。
答案建议将dequeueReusableCellWithIdentifier:
替换为fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
。
一旦尝试,当我点击标签栏scrollTableToTop时我崩溃了,错误:println()
我不确定导致错误差异的是什么。
接下来,可能更重要的是解决这个问题,我将我的代码填充到override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject!) -> PFTableViewCell? {
println("cellForRowAtIndexPath 1")
super.tableView.cellForRowAtIndexPath(indexPath)
//let myCell = tableView.dequeueReusableCellWithIdentifier("tableViewCell", forIndexPath: indexPath) as! TableViewCell
let myCell = tableView.dequeueReusableCellWithIdentifier("tableViewCell") as! TableViewCell
println("cellForRowAtIndexPath 2") //This line DOES NOT PRINT
...insert more random code here...
return myCell
}
的边缘,以找出崩溃发生的位置。
以下是我的结果:
dequeueReusableCellWithIdentifier:forIndexPath:
第一行打印到控制台,然后应用程序在第二行之前崩溃。我非常肯定这是应用程序崩溃的界限。
此外,如果我返回serviceid = request.form.get('serviceid')
areaid = request.args.get('areaid')
,第二行也不会打印,但应用程序不会崩溃。
为什么我的scrollTableToTop函数导致应用程序崩溃?
为什么点击状态栏滚动到顶部不会导致问题?