Atrapado NSInternalInconsistencyException request de rect en invalidPathMap

La siguiente línea bloquea el progtwig:

let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! ItemCell 

El logging de la console muestra el siguiente error:

 "caught "NSInternalInconsistencyException", "request for rect at invalid index path (<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0})" 

Aquí hay una list de viñetas de cosas que he revisado:

  • El ID del cuadro de guiones correcto aparece en el inspector de identidad
  • La class personalizada correcta aparece en el inspector de identidad
  • El inspector de attributes tiene "ItemCell" en el campo Identificador de celda Vista de tabla

Aquí está el código completo:

 import XCTest @testable import ToDo class ItemCellTests: XCTestCase { override func setUp() { super.setUp() // Put setup code here. This method is called before the invocation of each test method in the class. } override func tearDown() { // Put teardown code here. This method is called after the invocation of each test method in the class. super.tearDown() } func testSUT_HasNameLabel(){ let storyboard = UIStoryboard(name: "Main", bundle: nil) let controller = storyboard.instantiateViewControllerWithIdentifier("ItemListViewController") as! ItemListViewController _=controller.view let tableView = controller.tableView tableView.dataSource = FakeDataSource() let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! ItemCell XCTAssertNotNil(cell.titleLabel) } } extension ItemCellTests{ class FakeDataSource: NSObject, UITableViewDataSource { func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { return UITableViewCell() } } } 

Aquí está el código ItemCell.swift:

 import UIKit class ItemCell: UITableViewCell { @IBOutlet weak var titleLabel: UILabel! func configCellWithItem(item: ToDoItem){ } } 

Todas las properties vinculadas al guión gráfico están conectadas. ¿Qué se pasa por alto?

Parece que este código es de mi libro. Ese es un error conocido en el libro. Cambie el método de testing a lo siguiente:

 func testSUT_HasNameLabel(){ let storyboard = UIStoryboard(name: "Main", bundle: nil) let controller = storyboard.instantiateViewControllerWithIdentifier("ItemListViewController") as! ItemListViewController _=controller.view let tableView = controller.tableView let dataProvider = FakeDataSource() tableView.dataSource = dataProvider let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! ItemCell XCTAssertNotNil(cell.titleLabel) } 

Luego, cuando más tarde refactorice ese código para poner la configuration en el método setUp , agregue una propiedad let dataProvider = FakeDataSource() al caso de testing y let dataProvider = FakeDataSource() en el origen de datos de la vista de tabla ( tableView.dataSource = dataProvider ) en setUp .

Una solución que encontré hasta el momento fue cambiar la function inicial problema-hijo que era:

 let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! ItemCell 

Cambiando a lo siguiente para que pasen las testings:

 let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell") as! ItemCell