nib但没有获得UITableView

时间:2012-06-27 08:01:08

标签: ios ios6

我的应用程序适用于iOS 5.1,但对于iOS 6模拟器,我收到以下错误。

  

由于未捕获的异常而终止应用   ' NSInternalInconsistencyException',原因:' - [UITableViewController   loadView]加载" MainListViewController"笔尖,但没有得到   的UITableView'

我是UITableViewController的子类,我不想改变它。

tableview是以编程方式创建的,有一个虚拟MainListViewController.xib可以从Mainwindow.xib Tab Bar Controller加载。

我还尝试删除MainListViewController.xib,将其从MainWindow.xib标签栏控制器中删除,在AppDelegate中创建MainListViewController并将其添加到标签栏控制器UITabBarItem摆脱这个笔尖问题,但我仍然得到同样的错误。

13 个答案:

答案 0 :(得分:98)

如果您有UITableViewController子类的NIB,则其view商店必须连接到UITableView

你是正确的删除MainListViewController.xib并在代码中完成所有操作,但它不适合你的原因是因为你在构建时不会删除旧的XIB。跑。因此,从模拟器中删除应用程序,然后重试。它应该工作。

答案 1 :(得分:28)

我在使用故事板时遇到了类似的问题。为了别人的利益,我会发布我的解决方案。关键是如果您已将文件的所有者正确设置为UITableView的子类,则仍需确保将view属性设置为Table View。我正在使用故事板,但同样的东西也应该适用于笔尖。展开“文档大纲”,以便查看故事板的层次结构。我将在下面添加一些屏幕截图。解决此问题的快捷方法是,您希望在文档大纲中查看视图。删除您作为孩子的任何tableview。将另一个tableview拖动到view属性的顶部。完成。我会在屏幕截图中向您展示。

enter image description here

注意两个表。您想要删除table1及其单元格。

enter image description here

好。现在将table2拖到视图中,您就完成了。应该现在就行。基本上,如果你有一个UITableViewController的子类,那么它必须有Table View代替视图,否则它会崩溃。

enter image description here

答案 2 :(得分:17)

原因可能是:

.h文件检查它是否是UIViewController的子类。它会解决问题。

答案 3 :(得分:11)

简而言之,您将自定义UITableViewController子类设置为UIViewController !! 你不能做这个。你应该给UIViewController一个UIViewController子类。

答案 4 :(得分:9)

如果您使用UITableView作为顶视图。

像这样:

enter image description here

您需要在Controller中使用UITableViewController

class ItemsViewController: UITableViewController

如果您在Storyboatd中的View下使用UITableView。

像这样:

enter image description here

你需要在UIViewController中使用UITableViewDelegate和UITableViewDataSource

class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource

答案 5 :(得分:4)

我在使用Storyboard和1表View时找到了解决方案。

关键是当你创建一个自定义类(newViewController)时,只需检查它是UITableViewController的子类。创建之后转到表视图控制器(我们的表)并在Identity Inspector中选择之前创建的自定义类(newViewController)。

这对我有用。希望我的评论可以帮助别人。

答案 6 :(得分:3)

有几个原因可能会发生这种情况。

  1. 您可能没有添加UITableViewDelegate& UITableViewDataSource到你的.h

    @interface TableController:UIViewController {

  2. 您可能尚未将声明的插座连接到Storyboard / Nib中的组件

  3. 您可能在.h

  4. 中调用UIViewController而不是UITableView或vide verser

    @interface TableController : UIViewController

     @interface TableController : UITableViewController 
    

答案 7 :(得分:3)

请将您的表视图作为View outlet连接。必须将outout连接到UITableView。

答案 8 :(得分:1)

我有这个问题,解决它只是一件简单的事情。

如果您已经创建了......请保留笔尖

转到(XIB文件)并将对象库中的tableView组件添加到XIB文件的iPhone屏幕,它应该可以工作:)

答案 9 :(得分:0)

这对我有用。希望它可以帮到你。

在AppDelegate中 - >

#import "TableViewController.h" // name of your TableViewController class

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//PUT
TableViewController *controller = [[TableViewController alloc]
                                  initWithStyle:UITableViewStylePlain];
    self.window = [[UIWindow alloc]
                   initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = controller;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    // Override point for customization after application launch.
    return YES;
}

在故事板中确保您的视图控制器指向此类:

Story Board

答案 10 :(得分:0)

我也遇到过这个问题,但我在xcode 6.2中使用了storyboard。我从故事板中删除了相应的视图,并将表视图控制器从对象库重新拖动到故事板,然后就可以了。

答案 11 :(得分:0)

@smileBot回答帮助我意识到解决方案非常简单,iOS提出的错误是有意义的

  

由于未捕获的异常而终止应用   ' NSInternalInconsistencyException',原因:' - [UITableViewController   loadView]加载" MainListViewController"笔尖,但没有得到   的UITableView'

他们基本上说nib的视图控制器没有返回UITableView,因为它不是,对于大多数人来说 - 你的笔尖正在返回视图 - 这是为你创建的在Xcode IDE中创建新的ViewController时默认。

解决方案就像删除查看一样简单 - 这可能会违反常规 - 但继续选择它和退格 - 然后在ViewController中拖放UITableView,这个UITableView现在就可以了充当TableViewController中的根视图。

请记住,只有直接继承UITableViewController的类才需要这样做。

祝你好运。

答案 12 :(得分:0)

我有同样的问题,浪费了3个小时后我发现了......"这是错误的"我使用tableviewcontroller类并给出该类的uiviewcontroller引用,而不是视图控制器类我采取tableviewcontroller类,因为我在故事板中采用uiviewcontroller。所以删除tableviewcontroller类并粘贴tableviewcontroller类的代码来查看控制器类,"不粘贴整个代码只粘贴逻辑"之后在身份检查器的故事板中给出当前视图控制器类的类引用。