2015-05-04 47 views
4

为什么我得到这个错误?如何解决“笔尖,但没有得到一个UITableView”的错误?

终止应用程序由于未捕获的异常 'NSInternalInconsistencyException',原因是:“ - [UITableViewController中 的loadView]加载的 “PB1-RE-LU8 - 视图 - 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

+0

设置代表... –

+0

我该如何正确地做到这一点? –

+0

写在Void没有加载方法.. self.delegate = self; self.dataSource =自我;并在ViewController.h Extend ..

回答

14

我有面子同样的问题在很久以前,所以愚蠢的错误是,我已经子类UITableViewController,我已经添加UITableViewUIViewController

从你的故事板的图像,它可能如果你使用UIViewController代替UITableViewController,只要尝试这种方式可以解决你的问题得到解决,像

class FriendListTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate 
+1

我认为你的答案是我们如何使用objective-c设置委托,我已经设置了这样的委托“FriendListTableViewController:UIViewController,UITableViewDelegate,UITableViewDataSource”。但我仍然有同样的错误 –

+0

你是否检查过你的'UITableView'已经附加了顶层。你可以通过'UIStoryBoard'的视图层次来检查它。 –

+0

@EgaSetyaPutra上面的答案是使用swift ..你使用的是swift还是objective c? –

2

SWIFT 2 UPDATE

我试图@ 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作为引用插座。

希望这可以帮助那些未来。

+0

是的,我经常使用和你一样的方法。这很容易 –

+0

@lukeslvi:从你对我的回答和这个答案的评论中,我无法确定你的问题是否已解决,或者仍然存在? –

+0

不存在了。非常感谢。我将你的建议与另一个链接的建议结合起来。现在它起作用了。 – lukaivicev

1

我曾就此问题与斯威夫特2时,Xcode 7.2,我改变了View Controller我拖着我的Storyboard到自定义UITableViewController类的话,我拖着Table ViewView Controller。我没有意识到我把它作为View的孩子,它是原来的View Controller的一部分,我把它拖到Storyboard上。

我只是删除了View并添加了表视图作为超级视图的第一个孩子。

相关问题