创建一个UITableView对象在Swift中崩溃

时间:2015-05-08 04:01:05

标签: ios uitableview swift

我正在Swift中创建一个待办事项应用程序,我正在尝试使用 UITableView 来显示任务。用户添加任务,然后按"完成"。 UITableView 会重新显示在前面,应用程序崩溃。这是我的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: nil) //crashes on this line
    cell.textLabel!.text = taskMgr.tasksArray[indexPath.row].name
    cell.detailTextLabel!.text = taskMgr.tasksArray[indexPath.row].desc

    return cell
}

有趣的是,这行在我很快创建的另一个非常相似的应用程序中运行良好。有谁能请我指出正确的方向?如果有必要,我很乐意添加更多细节。

3 个答案:

答案 0 :(得分:1)

我是这样写的:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell:CustomCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell
    cell.lblText.text  = "Testing"
    return cell
}

答案 1 :(得分:0)

您应该重构代码以利用UITableView的性能。您的单元格可以重复使用,而不是每次在屏幕上显示时重新创建。

为此,您应该删除UITableViewCell的init方法调用。而是将其替换为: dequeueReusableCellWithIdentifier:forIndexPath:

iOS 6中的新功能,模式是使用带有重用标识符的tableview注册TableViewCell子类。然后,您可以使用dequeReusableCellWithIdentifier轻松获取可重用的单元格:forindexPath:

viewDidLoad或调用tableview数据源/委托方法之前的某个地方,您应该调用注册您的单元子类。 registerClass:forCellReuseIdentifier:

对于你,在Swift中,你会想要打电话:

tableview.registerClass(UITableViewCell.self, identifier:"MyReuseIdentifier")
// note there is also a method to register nibs

然后在cellForRowAtIndexPath方法中:

tableView.dequeReusableCellWithIdentifier("MyReuseIdentifier", forIndexPath: indexPath)

答案 2 :(得分:0)

使用重用标识符

my_engine_engine.articles_path

使用明细标题

mount MyEngine::Engine => '/app', :as => 'my_engine'