如何修复“nib但没有得到UITableView”错误?

时间:2015-05-04 10:43:09

标签: ios iphone uitableview swift uiview

为什么我收到此错误?

  

由于未捕获的异常而终止应用   'NSInternalInconsistencyException',原因:' - [UITableViewController   loadView]加载了“pB1-re-lu8-view-o7U-YG-E7m”笔尖,但没有得到   的UITableView'。

这是我的代码:

class FriendListTableViewController: UITableViewController{


var objects = NSMutableArray()
var dataArray = [["firstName":"Debasis","lastName":"Das"],["firstName":"John","lastName":"Doe"],["firstName":"Jane","lastName":"Doe"],["firstName":"Mary","lastName":"Jane"]]

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Table View

 override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dataArray.count
}

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

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
    let object = dataArray[indexPath.row] as NSDictionary
    (cell.contentView.viewWithTag(10) as! UILabel).text = object["firstName"] as? String
    (cell.contentView.viewWithTag(11) as! UILabel).text = object["lastName"] as? String
    return cell
}

 override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    // Return false if you do not want the specified item to be editable.
    return false
}

我的故事板是这样的:

storyboard

3 个答案:

答案 0 :(得分:18)

我曾经一次面对同样的问题,这是一个愚蠢的错误,我已经将UITableViewController的子类化,我在UITableView中添加了UIViewController

从您的故事板图片中,如果您使用UIViewController代替UITableViewController,则可以解决此问题,只需尝试这种方法就可以解决您的问题,例如

class FriendListTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 

答案 1 :(得分:2)

SWIFT 2更新

我尝试了@Viralsavaj的答案,但是直到我将tableView“连接”起来作为ViewController中故事板的插座,它才对我起作用。

像这样:@IBOutlet weak var tableView: UITableView!

还可以在@Viralsavaj中提到这个:

class TableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

我也特别使用了这个链接帮助:How to reference tableView from a view controller during a segue

只需将tableView拖到ViewController中,然后将其作为插座即可。然后,您可以引用其属性,例如self.tableView.reloadData()

在我将tableView添加为引用插座之前,此属性以及引用tableView的其他属性都给了我错误。

希望这对未来的人有所帮助。

答案 2 :(得分:1)

我在使用Swift 2,Xcode 7.2时遇到了这个问题,我将Storyboard更改为UITableViewController拖到自定义Table View类,然后我拖了一个View ControllerView。我没有意识到我把它作为原始View Controller Storyboard的{​​{1}}的一个孩子放在View上。

我只是删除了getIntialState并再次添加了Table View作为Super View的第一个子节点。