我的应用程序适用于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
摆脱这个笔尖问题,但我仍然得到同样的错误。
答案 0 :(得分:98)
如果您有UITableViewController
子类的NIB,则其view
商店必须连接到UITableView
。
你是正确的删除MainListViewController.xib
并在代码中完成所有操作,但它不适合你的原因是因为你在构建时不会删除旧的XIB。跑。因此,从模拟器中删除应用程序,然后重试。它应该工作。
答案 1 :(得分:28)
我在使用故事板时遇到了类似的问题。为了别人的利益,我会发布我的解决方案。关键是如果您已将文件的所有者正确设置为UITableView的子类,则仍需确保将view属性设置为Table View。我正在使用故事板,但同样的东西也应该适用于笔尖。展开“文档大纲”,以便查看故事板的层次结构。我将在下面添加一些屏幕截图。解决此问题的快捷方法是,您希望在文档大纲中查看视图。删除您作为孩子的任何tableview。将另一个tableview拖动到view属性的顶部。完成。我会在屏幕截图中向您展示。
注意两个表。您想要删除table1及其单元格。
好。现在将table2拖到视图中,您就完成了。应该现在就行。基本上,如果你有一个UITableViewController的子类,那么它必须有Table View代替视图,否则它会崩溃。
答案 2 :(得分:17)
原因可能是:
.h文件检查它是否是UIViewController的子类。它会解决问题。
答案 3 :(得分:11)
简而言之,您将自定义UITableViewController子类设置为UIViewController !! 你不能做这个。你应该给UIViewController一个UIViewController子类。
答案 4 :(得分:9)
如果您使用UITableView作为顶视图。
像这样:
您需要在Controller中使用UITableViewController
class ItemsViewController: UITableViewController
如果您在Storyboatd中的View下使用UITableView。
像这样:
你需要在UIViewController中使用UITableViewDelegate和UITableViewDataSource
class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
答案 5 :(得分:4)
我在使用Storyboard和1表View时找到了解决方案。
关键是当你创建一个自定义类(newViewController)时,只需检查它是UITableViewController的子类。创建之后转到表视图控制器(我们的表)并在Identity Inspector中选择之前创建的自定义类(newViewController)。
这对我有用。希望我的评论可以帮助别人。
答案 6 :(得分:3)
有几个原因可能会发生这种情况。
您可能没有添加UITableViewDelegate& UITableViewDataSource到你的.h
@interface TableController:UIViewController {
您可能尚未将声明的插座连接到Storyboard / Nib中的组件
您可能在.h
@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;
}
在故事板中确保您的视图控制器指向此类:
答案 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类的代码来查看控制器类,"不粘贴整个代码只粘贴逻辑"之后在身份检查器的故事板中给出当前视图控制器类的类引用。