笔尖但没有得到 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
设置 UICollectionViewController 时出错 - 笔尖但没有获得 UICollectionView