首页 文章

加载的笔尖但没有设置'view'插座

提问于
浏览
660

我在项目中添加了一个新的nib文件,并尝试加载它 .

但是,当我点击应该带我到我创建的视图的工具栏图标时,我得到一条带有消息的 NSInternalInconsistencyException

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

所以我打开了我的nib文件,我看到该视图没有设置引用插座 . 但是,我尝试单击并将“新引用插座”的圆圈拖动到文件所有者,但它不会让我...我需要做什么才能显示我的视图?

27 回答

  • 13

    我想要第二个Stephen J.有时候X Code会让我感到困惑 . 我刚刚体验过我玩过很多UI的经历,并且已经添加和删除了很多次 . 这些网点不再接线了 . 我从来没有弄清楚具体的原因(我已经尝试了上面的所有解决方案),我只需要删除NIB并从头开始重新创建它,事实上它必须在它工作之前使用不同的NIB名称 . (XCode 4.6.1)浪费了几个小时 .

  • 1

    我有同样的问题,但需要一个稍微不同的解决方案 . 这种情况下的问题是文件所有者的类,而不是视图的类 . 要设置它,我必须单击Interface Builder窗口左下角的“向后播放”图标,然后出现选项,隔离文件所有者,第一响应者和视图的特征 . 单击第一个(一个大的透明框),使我能够按照上面的建议设置其自定义类 .

  • 4

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

  • 0

    我对XCode 4.6.3也有同样的问题 . 我已经开始使用一些名为 MySettingsView.h.m 的文件,但删除了它们以支持 MySettingsViewController.h ,但是尽管尝试了这里提到的大部分提示,它仍然保持错误,

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

    它显然仍然是"confused",试图加载MySettingsView.xib而不是MySettingsView Controller.xib . 也许它的"do what I mean"逻辑太花哨了 .

    所以我通过在MySettingsViewController.m中硬编码NIB / XIB名称解决了这个问题:

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

    选择文件所有者并转到打开身份检查器,给出它对应的类名 . 如果上述方法都不起作用,仍然无法看到视图插座,则将新的参考插座连接到文件所有者,然后您就可以看到视图插座 . 单击视图插座以在View Outlet和File的所有者之间 Build 连接 . 运行应用程序这很好 .

  • 1

    未设置View Identity - Class Identity . 将其设置为适当的类后,问题得以解决 .

  • 0

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

  • 0

    对我来说,这里陈述的所有事情_301624都是真的,但仍然是抛出错误,原因是我创建了一个名为ABCView的View类,然后将其删除后我添加了一个视图控制器作为ABCViewController,所以不知怎的它在新视图中引用了旧的ABCView控制器,我不得不删除ABCViewController并添加一个新的名称解决我的问题 .

    谢谢

  • 0

    对我来说问题的答案是确保 xib 文件名和 swift 文件名不应该相同 . 当创建类的对象时,它优先于 xib 文件,在这种情况下 XIB 加载无法找到View插座 .

    示例:我有DataFragement.xib和DataFragment.swift

    而我正试图创造像对象一样

    let fragment = DataFragment()

    为了解决这个问题,我将我的xib文件重命名为 data_fragment.xib 并且瞧瞧一切都很有魅力 .

  • 3

    我刚把它修好了 . 大项目,两个文件 . 一个是“ReallyLargeNameView”,另一个是“ReallyLargeNameViewController”

    基于上面选择的第二个答案,我决定要清理我的构建 . Nada,但我仍然怀疑XCode(因为我有两个相同的类,应该抽象它们但是......)所以一个人在工作,一个人没有 . 文件的所有者名称是复制和粘贴,插座重新挂起,xCode重新启动,仍然没有 .

    所以我删除了类似的命名类(这是一个视图) . 很快,新的错误“插座内部没有联系“字面上是”webView不是关键值“哇...基本上说”Visual Studio更好“ . 无论如何......我擦除了较小的命名文件,而bam,它的工作原理 .

    XCode被类似命名的文件所困惑 . 而且该项目足够大,需要重新启动,这可能是其中的一部分 .

    希望我有一个比“XCode感到困惑”更为技术性的答案,但是,xCode在这一点上变得很混乱 . 像我帮助一个小孩一样解除困惑 . 它现在有效,:)如果上面没有解决任何问题,应该让其他人受益 .

    永远记得清理你的构建(通过删除模拟器)

  • 1

    我在意外删除xib引用时遇到了同样的问题并再次添加它 . 我只是通过在Files owner和view之间 Build 连接来修复 . 还要确保你的FilesOwner的自定义类是你期望的viewController .

  • 3

    我有同样的问题,我想通了,因为我在 Table ViewTable View 属性中勾选了“ Static cells ” . 工作时改为“ Dynamic Prototypes ” . 截图如下 .
    enter image description here

  • 1649

    花了不止一个小时试图找出为什么我的视图属性没有在我的视图控制器中从nib启动时设置 . 记得在视图控制器的initWithNibName中调用“[super initWithNibName ...]” .

  • 14

    你们是对的,但由于我是新人,我花了一点时间才弄清楚要做的所有步骤 . 这对我有用:

    • 打开XIB文件导致问题

    • 点击左侧栏上的文件所有者图标(顶部一个,看起来像一个黄色的方框)

    • 如果没有看到右侧边栏,请单击工具栏中"view"上方的第三个图标 . 这将显示右侧边栏

    • 在右侧边栏中,单击第三个选项卡 - 看起来有点像报纸的选项卡

    • 在顶部的"Custom Class"下,确保Class是应与此视图对应的ViewController的名称 . 如果没有,请输入它

    Custom class configuration

    • 在右侧边栏中,单击最后一个选项卡 - 看起来像带有箭头的圆圈的选项卡

    • 你应该看到"outlets",其下有"view" . 将旁边的圆圈拖到左侧栏上的"view"图标(底部的一个,看起来像一个带有灰色粗轮廓的白色正方形

    Custom class configuration

    • 保存xib并重新运行
  • 139

    在我的项目中遇到了同样的错误,但原因不同 . 在我的例子中,我的自定义UITableViewController类中有一个名为“View”的IBOutlet设置 . 我知道“视图”是特殊的,因为它是基类的成员,但我不认为View(不同的情况)也是一个问题 . 我猜Cocoa的某些区域不区分大小写,并且可能加载xib是其中一个区域 . 所以我只是将它重命名为DefaultView,现在一切都很好 .

  • 1

    你确定你有一个UIView(或子类)分配给你的ViewController的“view”属性吗?

    右键单击xib左侧窗格中的“文件所有者”,查看yourViewController并验证是否设置了“view”插座 . 如果没有,请将其设置为视图!

    这肯定会解决问题

  • 0

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

  • 25

    就我而言,视图没有在xib中查看 . 在xib中,View是size = none(右手第4个选项卡) . 我将大小设置为Freeform并重新加载xCode . 视图被上诉,我设置了View的正确链接 .

  • 0

    对于使用xib方法创建UIView并遇到此问题的任何人,您会注意到在连接检查器菜单下您将没有“view”插座 . 但是,如果您将文件所有者自定义类设置为UIViewController,然后您将看到“视图”插座,您可以通过CMND将插座连接到CustomView .

  • 0

    对我来说,问题是由于调用 initWithNibName:bundle: 引起的 . 我正在使用来自nib文件的表格视图单元格来定义位于 tableViews 上的条目表单 . 因为我没有理由勾住一个人 . 相反,如果我改为调用 initWithStyle: 方法,并从那里调用,我加载nib文件,然后事情按预期工作 .

  • 0

    我通常可以通过重新 Build 文件所有者和视图之间的连接来解决它 . 按住Ctrl键从文件所有者拖动到View(在IB中),然后从弹出菜单中选择视图 .

  • 58

    在我的例子中,*** ViewController类中的指定初始化程序 - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 已经实现,所以即使我调用其他初始化程序来初始化对象,也会调用指定的初始化程序 .

    所以要解决这个问题,检查 - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 也是一种正确的方法 .

  • 65

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

  • 0

    今晚我遇到了一个非常相似的东西,有一个Swift UIViewController子类 . 在这种情况下,上述修复都没有奏效,但重新排序了我的代码 . 净网,有一个子类的扩展发生在子类的定义本身在同一个文件中似乎混淆了XCode,尽管编译正常;修复是将扩展放在子类的定义之后 .

    我已经发布了详细信息in an answer to this similar question .

  • 4

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

    • 选择文件所有者

    • 在右侧面板上选择自定义类 .

    • 输入自定义类名

    enter image description here

    • 在右侧面板上选择oultets

    • 拖动视图出口以查看组件

    enter image description here

    最后,使用滚动代码实例化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];
    
  • 6

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

    我发现这个问题特别是在Swift中单独创建文件 .

  • 3

    对我来说,它发生了,何时

    • 我有一个与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丢失,,,添加此行解决了我的问题 .

相关问题