62

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

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UITableViewController loadView] 加载了“MainListViewController”nib 但没有获得 UITableView。

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

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

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

4

13 回答 13

102

如果您有UITableViewController子类的 NIB,则其view出口必须连接到UITableView.

您可以删除MainListViewController.xib并在代码中执行所有操作,但它对您不起作用的原因是因为旧的 XIB 在您构建和运行时不会被删除。因此,从模拟器中删除应用程序并重试。它应该工作。

于 2012-06-27T08:28:21.817 回答
29

我在使用故事板时遇到了类似的问题。为了他人的利益,我将发布我的解决方案。关键是,如果您正确地将文件的所有者设置为 UITableView 的子类,您仍然必须确保将视图属性设置为表视图。我正在使用故事板,但同样的事情也应该适用于笔尖。展开“文档大纲”,以便您可以看到情节提要的层次结构。我将在下面包含一些屏幕截图。解决此问题的快速方法是您要查看文档大纲中的视图。删除您作为其子级的任何 tableview。将另一个 tableview 拖到 view 属性的顶部。完毕。我将在屏幕截图中向您展示。

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

于 2013-10-07T20:03:41.113 回答
17

原因可能是:

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

于 2013-05-31T11:00:39.397 回答
12

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

于 2014-09-02T15:20:34.153 回答
12

如果你使用 UITableView 作为你的 Top View。

像这样 :

在此处输入图像描述

您需要在控制器中使用 UITableViewController

class ItemsViewController: UITableViewController

如果您在 Storyboatd 的视图下使用 UITableView。

像这样 :

在此处输入图像描述

您需要将 UITableViewDelegate 和 UITableViewDataSource 与 UIViewController 一起使用

class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
于 2017-06-25T23:38:05.847 回答
4

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

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

这对我行得通。希望我的评论对某人有所帮助。

于 2014-01-29T05:47:24.290 回答
3

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

  1. 您可能尚未将 UITableViewDelegate 和 UITableViewDataSource 添加到您的 .h

    @interface 表控制器:UIViewController {

  2. 您可能尚未将声明的插座连接到情节提要/笔尖中的组件

  3. 您可能会在 .h 中调用 UIViewController 而不是 UITableView 或 vide verser

@interface TableController : UIViewController

或者

 @interface TableController : UITableViewController 
于 2013-11-07T02:30:15.377 回答
3

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

于 2013-12-02T12:38:02.507 回答
1

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

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

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

于 2012-12-25T20:14:58.723 回答
1

@smileBot 的回答帮助我意识到解决方案非常简单,iOS 引发的错误是有道理的

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UITableViewController loadView] 加载了“MainListViewController”nib 但没有获得 UITableView。

他们基本上说 nib 的视图控制器没有返回 UITableView,因为它不是,大多数情况下 - 你的 nib 正在返回一个View - 当你在 Xcode IDE 中创建一个新的 ViewController 时,它默认为你创建。

解决方案就像删除那个视图一样简单——这可能会让人觉得不正常——但继续选择它并退格——然后在你的 ViewController 中拖放一个 UITableView,这个 UITableView 现在将作为你在 TableViewController 中的根视图。

请记住,这只对直接继承 UITableViewController 的类是必需的。

祝你好运。

于 2015-08-18T05:56:59.490 回答
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;
}

确保在情节提要中您的视图控制器指向此类:

故事板

于 2014-09-04T04:15:07.503 回答
0

我也遇到了这个问题,但是我在xcode 6.2中使用了storyboard。我从情节提要中删除了相应的视图,并将表视图控制器从对象库重新拖到情节提要中,然后它就可以工作了。

于 2015-04-30T02:19:15.700 回答
0

我有同样的问题,浪费了 3 个小时后我发现它......“这是错误的”我使用 tableviewcontroller 类并提供此类的 uiviewcontroller 参考,而不是视图控制器类,我使用 tableviewcontroller 类,因为我在情节提要中使用 uiviewcontroller。所以删除 tableviewcontroller 类并将 tableviewcontroller 类的代码粘贴到视图控制器类,“不粘贴整个代码只粘贴逻辑”之后在身份检查器的情节提要中给出当前视图控制器类的类引用。

于 2016-08-11T18:20:39.143 回答