笔尖已加载,但未设置“查看”出口

我向项目添加了一个新的nib文件,并尝试加载它。

但是,当我单击应该将我带到创建的视图的工具栏图标时,我收到一条NSInternalInconsistencyException消息:

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'-[UIViewController _loadViewFromNibNamed:bundle:]加载了“ ...”笔尖,但未设置视图出口。

因此,我打开了我的nib文件,并且看到没有设置参考插座的视图。 但是,我尝试单击并拖动“新引用出口”的圆圈到File's Owner,但这不会让我...我需要做些什么才能显示我的视图?


#1楼

我遇到了同样的问题,但是需要一个稍微不同的解决方案。 在这种情况下,问题是文件所有者的类,而不是视图的类。 要进行此设置,我必须单击Interface Builder窗口左下角的“向后播放”图标,然后出现一些选项,这些选项隔离了File Owner,First Responder和View的特征。 单击第一个(透明的大框),然后按上述建议设置我的自定义类。


#2楼

我只是把这个固定在我的。 大项目,两个文件。 一个是“ ReallyLargeNameView”,另一个是“ ReallyLargeNameViewController”

根据上面选择的第二个答案,我决定应该清理自己的构建。 Nada,但我仍然怀疑XCode(因为我有两个相同的类,应该对它们进行抽象,但是……)所以,一个人在工作,而不是。 文件的所有者名称已达到复制和粘贴的程度,重新命名了出口,重新启动了xCode,仍然一无所获。

因此,我删除了类似的命名类(这是一个视图)。 不久,新错误“字面上的插座未连接”实际上是“ webView不是键值”等等……基本上是说“ Visual Studio更好”。 无论如何...我删除了较小的命名文件,并且bam,它起作用了。

XCode被名称相似的文件所混淆。 该项目足够大,需要重新启动,这可能是其中的一部分。

希望我有一个比“ XCode困惑”更多的技术答案,但是好吧,xCode在这一点上变得很困惑。 不用困惑,就像我会帮助一个小孩一样。 它现在可以工作,:)如果上述方法不能解决问题,则应该使他人受益。

永远记住要清理构建(也要删除模拟器)


#3楼

我通常可以通过重新建立文件所有者和视图之间的连接来修复它。 从文件的所有者按住Control并拖动到您的View(在IB中),然后从弹出菜单中选择视图。


#4楼

在我的项目中发生了相同的错误,但原因不同。 在我的情况下,我在自定义UITableViewController类中使用名称为“ View”的IBOutlet设置。 我知道“视图”很特别,因为它是基类的成员,但是我认为“视图”(不同的情况)也不会有问题。 我猜可可的某些区域不区分大小写,可能装载一个xib是这些区域之一。 所以我刚刚将其重命名为DefaultView,现在一切都很好。


#5楼

选择文件所有者,然后打开身份检查器,为其指定对应的类名称。 如果以上方法均不起作用,但仍然看不到视图出口,则将新的引用出口连接到“文件的所有者”,然后就可以看到视图出口。 单击视图插座,以在视图插座和文件所有者之间建立连接。 运行该应用程序可以正常工作。


#6楼

我遇到了同样的问题,但是需要一个不同的解决方案。 在这种情况下,问题是文件所有者的类未连接到xib文件。


#7楼

我想支持StephenJ。有时候X代码确实很混乱。 我刚刚经历了很多使用UI的经历,并多次添加和删除了网点。 插座将不再接线。 我从来没有弄清楚具体的原因(我已经尝试了上面的所有解决方案),而我只需要删除NIB并从头开始重新创建它,实际上,在NIB起作用之前,必须使用其他名称。 (XCode 4.6.1)为此浪费了几个小时。


#8楼

就我而言,该视图未在xib中查看。 在xib中,视图的大小为none(无)(右侧第4个标签)。 我将大小设置为Freeform并重新加载xCode。 视图已被上诉,我将正确的链接设置为视图。


#9楼

我在XCode 4.6.3中遇到了同样的问题。 我最初使用了几个名为MySettingsView.h.m文件,但为了支持MySettingsViewController.h而删除了它们,但是尽管尝试了此处提到的大多数提示,但仍然会出错,

2013-07-05 11:48:17.205 MyApp [39024:c07] ***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'-[UIViewController _loadViewFromNibNamed:bundle:]加载了“ MySettingsView”笔尖,但视图出口没有设置。

显然仍然很“困惑”,试图加载MySettingsView.xib而不是MySettingsView Controller .xib。 也许它的“按我的意思做”的逻辑太花哨了。

所以我通过在MySettingsViewController.m中对NIB / XIB名称进行硬编码来解决此问题:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"MySettingsViewController" bundle:nibBundleOrNil];
}

#10楼

您确定已将UIView(或子类)分配给yourViewController的“ view”属性吗?

在xib的左窗格中,为yourViewController右键单击“文件所有者”,并确认已设置“视图”出口。 如果没有,将其设置为视图!

这肯定会解决问题


#11楼

对我来说,这里https://stackoverflow.com/a/6395750/939501所说的所有内容都是真实的,但是仍然抛出错误,原因是我创建了一个名称为ABCView的View类,然后将其删除,后来我添加了一个View Controller作为ABCViewController因此以某种方式在新的视图控制器中引用了旧的ABCView,因此我不得不删除ABCViewController并添加一个新名称不同的名称来解决我的问题。

谢谢


#12楼

如果您尝试了所有操作后仍然遇到此错误,请尝试从头开始重新创建类文件,但要记住选中“也创建XIB文件”复选框。 当分别创建这些文件时,这将自动链接一些未链接的项目。 创建完成后,您可以将所有内容剪切并粘贴到新的XIB上,并且应该可以正常工作。

我正在专门通过在Swift中单独创建文件来发现此问题。


#13楼

今晚,我遇到了一个与Swift UIViewController子类非常相似的东西。 在这种情况下,以上修复程序均无效,但是对我的代码进行了一些重新排序。 尽管对子类进行了很好的编译,但在同一文件中子类的定义本身之前,对子类进行扩展的Net-net似乎使XCode感到困惑。 解决方法是将扩展名放在子类的定义之后。

我已经在回答类似问题的细节张贴了细节。


#14楼

这是Josh Justice的建议,但是以图形方式(图片是我的):

  1. 选择文件所有者
  2. 在右侧面板上选择自定义类。
  3. 输入自定义类别名称

在此处输入图片说明

  1. 在右侧面板上选择八重奏
  2. 拖动视图出口以查看组件

在此处输入图片说明

最后,使用滚动代码实例化View Controller:

        PTFilterUserVC *aFilterUserVC = [[PTFilterUserVC alloc] initWithNibName:@"FilterVC" bundle:nil];

        //OPTIONAL.This is how 'I' am interested in present the view controller.
        [self.navigationController pushViewController:aFilterUserVC animated:YES];

#15楼

对我来说,发生的时候

  • 我有一个与Nib文件关联的ViewController类(.mm / h),
  • 该ViewController的UIView必须作为子视图加载到另一个视图上,

  • 我们将这样称呼

     -(void)initCheckView{ CheckView *pCheckViewCtrl = [CheckView instance]; pCheckView = [pCheckViewCtrl view]; [[self view]addSubview:pCheckView]; [pCheckViewCtrl performCheck]; } 

哪里

+(CheckView *)instance{
    static CheckView *pCheckView = nil;
    static dispatch_once_t checkToken;

    dispatch_once(&checkToken, ^{
        pCheckView = [[CheckView alloc]initWithNibName:@"CheckView" bundle:nil];
        if ( pCheckView){
            [pCheckView initLocal];
            **[pCheckView loadView];**
        }
    });

    return pCheckView;

}

在这里,缺少loadView ,,添加此行解决了我的问题。


#16楼

在我的情况下,实现了指定的初始化方法- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil *** ViewController类中的- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil ,因此即使我调用其他初始化方法来初始化对象,指定的初始化方法也会叫做 。

因此,要解决此问题,请检查- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil是否也是正确的方法。


#17楼

我不小心删除了xib引用并再次添加它时遇到了同样的问题。我只是通过在文件所有者和视图之间建立连接来解决的,还请确保您的FilesOwner的自定义类是您期望的viewController。


#18楼

我发现了同样的问题,这是因为我在Content选项下的Table View属性中勾选了“ 静态单元格 ”。 更改为“ Dynamic Prototypes ”时有效。 屏幕截图如下。 在此处输入图片说明


#19楼

未设置“视图标识-类标识”。 将其设置为适当的类后,问题已解决。


#20楼

对于使用xib方法创建UIView并遇到此问题的任何人,您都会注意到在连接检查器菜单下将没有“视图”出口。 但是,如果将File的Owners自定义类设置为UIViewController,然后将看到“视图”出口,您只需CMND即可将出口连接到CustomView。


#21楼

我在Xcode 9.3中遇到了类似的问题,并将“文件所有者的”属性检查器下的“模块”设置为项目模块为我解决了这一问题。


#22楼

先前的答案几乎可以解决我的问题,但缺少最后一步。

  1. 用相同的名称创建一个xib和swift文件。

添加视图和Swift文件

  1. 将文件所有者设置为UIView子类。

在此处输入图片说明

  1. 将出口从View拖到UIView子类,将其命名为“ contentView”

添加contentview

  1. 添加此自定义初始化程序,以便在xib加载时将其附加到contentView

将contentview添加为子视图

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle(for: self.classForCoder).loadNibNamed("SampleView", owner: self, options: nil)
        addSubview(contentView)
        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    }

现在,您添加的任何@IBOutlets都将被附加。

干杯,理查德


#23楼

当您有一个使用@objc引用不同名称空间的Swift代码时,请确保使用Objective-C类名称:

@objc(NamespacedSomeViewController)
class SomeViewController: UIViewController {
....

在这种情况下,您需要在IB中使用NamespacedSomeViewController


#24楼

打开您的viewController所在的情节提要文件或带有textEdit.app的 XIB相关文件,并检查该情节提要或XIB名称是否与viewController相同,然后进行更改,保存并重新加载/重新启动Xcode。


#25楼

如果您使用的是自定义init方法,请检查返回的内容是否有效。 我遇到了这样的一段代码,它崩溃了:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
   } return self;
}

在另一个类中,控制器的创建方式如下:

CustomController *controller = [[CustomController alloc] init];

问题是在init方法中,self尚未更改,应改为如下所示:

- (id)init {
   self = [super init];
   if (self) {
      CustomController *controller = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(className) owner:self options:nil];
      [controller viewDidLoad];
      self = controller;
   } return self;
}

#26楼

你们是对的,但是由于我是新来者,我花了一些时间才弄清楚实现此目的的所有步骤。 这对我有用:

  • 打开XIB文件导致问题
  • 单击左侧栏上文件的所有者图标(顶部,看起来像一个黄色轮廓框)
  • 如果看不到右侧边栏,请单击工具栏中“视图”上方的第三个图标。 这将显示右侧边栏
  • 在右侧边栏中,单击第三个标签-看起来有点像报纸的标签
  • 在顶部的“自定义类”下,确保“类”是应与此视图相对应的ViewController的名称。 如果没有,请输入
  • 在右侧边栏中,单击最后一个选项卡-一个看起来像带有箭头的圆圈的选项卡
  • 您应该看到带有“视图”的“出口”。 将其旁边的圆圈拖到左侧栏上的“视图”图标(底部,看起来像是带有粗灰色轮廓的白色正方形)
  • 保存XIB并重新运行

#27楼

仅仅花了一个多小时来尝试找出为什么从笔尖启动视图属性时未在视图控制器中设置视图属性的原因。 请记住在视图控制器的initWithNibName内部调用“ [super initWithNibName ...]”。


#28楼

我的问题是由在类文件夹中没有视图集的重复笔尖引起的。 xcode似乎选择一个笔尖进行构建,然后在下次构建项目时选择另一个。 刚刚删除了另一个。 看起来不错。 h!


#29楼

我也遇到了同样的问题,我的问题是我向ViewControllers笔尖添加了另一个本地化(英文),所以我的本地化德语应用程序找不到本地化英语的笔尖! 希望这对任何人有帮助!


#30楼

对我来说,问题是由调用initWithNibName:bundle:引起的。 我正在使用nib文件中的表格视图单元格来定义位于tableViews上的条目形式。 由于我没有观点,因此与某个观点挂钩是没有意义的。 相反,如果我改为调用initWithStyle:方法,并从那里加载nib文件,那么事情将按预期进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值