笔尖但没有得到 UITableView

Posted

技术标签:

【中文标题】笔尖但没有得到 UITableView【英文标题】:nib but didn't get a UITableView 【发布时间】:2012-06-27 08:01:08 【问题描述】:

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

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

我正在继承 UITableViewController 并且我不想更改它。

tableview 是以编程方式创建的,有一个虚拟的MainListViewController.xib 可以从Mainwindow.xib 标签栏控制器加载。

我还尝试删除MainListViewController.xib,将其从MainWindow.xib Tab Bar Controller 中删除,在AppDelegate 中创建MainListViewController 并将其作为UITabBarItem 添加到Tab Bar Controller 以摆脱这个笔尖问题,但是我仍然遇到同样的错误。

【问题讨论】:

您的表在哪里加载?它是否被设置为视图出口/属性 它是在 viewDidLoad 中加载的,在第二个版本中(以编程方式添加了一个 UITabBarItem)它没有设置为插座/属性。 【参考方案1】:

如果您有 UITableViewController 子类的 NIB,那么它的 view 出口必须连接到 UITableView

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

【讨论】:

谢谢!我删除了旧的应用程序,清理了项目并关闭了iOS模拟器,现在没有.xib文件的版本可以工作了。 我不明白,如果没有在任何地方使用xib文件来初始化UITableViewController的子类,为什么会出现问题呢?听起来像是 Xcode 的错误之类的......无论如何,我删除了 xib 文件,清理了项目并且它没有工作,但是在我删除旧应用程序之后它就工作了。 @xuhuanze - 但这就是这个问题的重点 - NIB 被用来初始化UITableViewController 的子类。如果您的问题有所不同,那么您应该考虑的不是这个问题。 @mattjgalloway 你是对的。我的问题不同,我用 xib 创建了控制器,但后来我决定不使用它,但同样的错误...... 你到底怎么知道这个荒谬的答案(尤其是第二部分),太棒了。【参考方案2】:

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

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

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

【讨论】:

当我想在 tableview 上方获得一个静态大小的视图时遇到了这个问题,在子类化 UITableViewController 时这似乎是不可能的(没有调整顶视图的大小)。你的回答让我相信我不得不继承 UIViewController 。然后我连接了我自己的 UITableView 实例。谢谢! @owenfi 如果你确实需要一个 tableViewController,你总是可以使用一个嵌入式的。所以,如果你在做一个静态的tableview,它必须是一个tableViewController。在这里,您可以使用嵌入式 tableViewController 解决这些问题。我一直在使用它们。 @cocoanut 抱歉,我需要一个动态原型表视图顶部的“静态大小”滚动视图(水平滚动)。不确定我是否按照您的示例进行操作,您是否能够扩展 UITableViewController 并调整其 tableView 的大小,例如屏幕底部的 50%? @owenfi 我不确定您要达到的目标。也许查看 raywenderlich.com/4680/… ,但如果 tableView 不适合您的需求,您也可以考虑使用 UICollectionView。我认为该教程已过时,因为在现代版本的 sdk 中使用 collectionViews 代替了此功能。 我一开始不明白这个答案,所以为其他人澄清一下:Table View 必须是 ActivitiesTVC - Activities 节点的子节点,而不是 View 的子节点【参考方案3】:

原因可能是:

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

像这样:

你需要在你的控制器中使用 UITableViewController

class ItemsViewController: UITableViewController

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

像这样:

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

class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource

【讨论】:

【参考方案6】:

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

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

这对我有用。希望我的评论对某人有所帮助。

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

发生这种情况的原因有多种。

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

    @interface TableController : UIViewController

    您可能没有将声明的插座连接到 Storyboard/Nib 中的组件

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

@interface TableController : UIViewController

 @interface TableController : UITableViewController 

【讨论】:

【参考方案9】:

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

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

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

【讨论】:

【参考方案10】:

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

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

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

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

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

祝你好运。

【讨论】:

【参考方案11】:

这对我有用。希望对你有帮助。

在 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;

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

【讨论】:

【参考方案12】:

我也遇到过这个问题,但是我在xcode 6.2中使用了storyboard。我从storyboard中删除了对应的view,然后将table view controller从object library重新拖到storyboard,就可以了。

【讨论】:

【参考方案13】:

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

【讨论】:

以上是关于笔尖但没有得到 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

加载了“PersonnalDetails”笔尖,但没有得到 UITableView

加载了笔尖但没有得到 UITableView

笔尖没有覆盖在相机视图上

设置 UICollectionViewController 时出错 - 笔尖但没有获得 UICollectionView

加载笔尖但未设置视图出口,找不到视图出口。

lldb 断点,加载了 nib 但没有得到 UITableView