当我在swift中呈现我的UITableViewController时,我的应用程序崩溃了

时间:2016-02-14 22:02:36

标签: ios objective-c swift uitableview

这是我的UITableViewController

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

    let cellId: String = "Cell"

    let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as UITableViewCell

    let data: NSManagedObject = list[indexPath.row] as! NSManagedObject

    let nom = data.valueForKey("nom") as! String
    let temps = data.valueForKey("temps") as! String

    cell.textLabel?.text = "\(nom)".uppercaseString
    cell.detailTextLabel?.text = "à fait : \(temps)"
    cell.detailTextLabel?.font = cell.detailTextLabel?.font.fontWithSize(15.5)

    return cell
}

这是我提出UITableViewController的行动

func seeAllScore(){
--------- when I put it in comment My App Work Correctly

    let tableView = AllScoreViewController()
    let navigationController = UINavigationController(rootViewController: tableView)
    self.presentViewController(navigationController, animated: true, completion: nil)

--------- when I put it in comment My App Crash

let vc:AllScoreViewController = self.storyboard!.instantiateViewControllerWithIdentifier("AllScore") as! AllScoreViewController
    self.presentViewController(vc, animated: true, completion: nil)
}

这是我的输出

2016-02-14 23:01:39.350 WhereIsCage[42787:16030964] *** Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UITableView.m:6564
2016-02-14 23:01:39.358 WhereIsCage[42787:16030964] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
*** First throw call stack:

目标是让UINavigationBar成为我的UITableViewCotroler

2 个答案:

答案 0 :(得分:0)

我建议您在故事板中定义了表视图控制器,但是直接用let tableView = AllScoreViewController()实例化它。

而不是这样做,你应该从故事板上加载它。看起来你也试过了(我不清楚该测试是否成功)......

您当前的实例化会创建一个表视图,但不知道已注册的单元格,因此会出错。

答案 1 :(得分:0)

当你这么说时

let tableView = AllScoreViewController()

您只是创建一个没有与故事板连接的新视图控制器实例。这意味着没有关于原型单元的信息,并且重用标识符未被注册。

我知道您实际想要实现的是将您的表视图嵌入到导航控制器中。要做到这一点:

  1. 在界面建筑
  2. 中选择表格视图场景
  3. 来自"编辑"菜单,选择"嵌入 - >导航控制器"
  4. 选择新的导航控制器场景并在Identity Inspector中为其指定一个Storyboard ID(例如navController)
  5. 现在,您可以在故事板中使用tableview控制器实例化导航控制器:

    let navvc = self.storyboard!.instantiateViewControllerWithIdentifier("navController") as! UINavigationController
    // If you want to access the AllScoreViewController
    let scoreVC=navvc.topViewController as! AllScoreViewController
    self.presentViewController(navvc, animated: true, completion: nil)