无法在捆绑中加载NIB

Goj*_*e87 98 iphone xcode titanium appcelerator ios

我正在尝试将Janrain Engage作为自定义模块与Appcelerator Titanium集成.我创建了一个示例模块,并将JREngage文件夹拖到示例模块xcodeproj中,如Jainrain文档中所示.

现在我给这个项目提供构建命令,然后执行./build.py,最后我执行titanium run命令.它在带有空白屏幕的模拟器中启动应用程序,并立即崩溃抛出以下错误.

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法在bundle中加载NIB:'NSBundle </ Users/abhilash/Library/Application Support/iPhone Simulator/4.2/Applications/CA167346-4091-4E16-B841-955D1D391713/test.app>(loaded)'名称为'JRProvidersController''

为什么会发生这种错误?

小智 197

访问文件检查器中的.xib文件的属性,选择框中的属性"Target Membership",然后您的xib文件与目标链接

  • 另外,如果您使用的是alloc init,而不是initWithNibName:bunle:,那么您将得到一个黑屏. (2认同)

kun*_*alg 54

在目标 - >构建阶段确保将.xib添加到复制捆绑资源,如果它不存在则添加.xib文件


chi*_*228 22

试着找出所有

XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];
Run Code Online (Sandbox Code Playgroud)

在您的代码中,并确保XXXController拼写正确

  • 具有讽刺意味的是因为你错误地拼写了XXXControlloer:P (50认同)

cre*_*_11 15

在将我的xcode从3.2升级到4.02之后,我遇到了同样的问题(异常'无法在bundle中加载NIB:..').虽然使用Xcode 3.2部署我的应用程序工作正常但它会导致xcode 4崩溃,从而引发上述异常 - 但仅当我尝试部署到IOS模拟器(v.4.2)时.针对IOS设备(v.4.1)也采用了Xcode 4.

事实证明(经过几个小时的拼命争夺)原因是.xib文件中几乎是"隐藏"的设置:

访问文件检查器中的.xib文件的属性:对于所有.xib文件,属性"Location"设置为"Relative to Group".我把它改成'相对于项目'并且瞧:所有.xib文件现在都在IOS模拟器中正确加载了!

我不知道这个奇怪的Xcode4行为背后的原因是什么,但也许值得尝试一下?


Tib*_*abo 12

在我的情况下,它非常奇怪(使用故事板):由于某种原因,它从plist中的"主要故事板文件基本名称"更改为"主要nib文件基本名称".

更改回"主故事板文件基本名称"(UIMainStoryboardFile)解决了这个问题


Han*_*man 9

该错误表示没有"JRProvidersController"名称的.xib文件.重新检查是否JRProvidersController.xib存在.

您将加载.xib file

controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];
Run Code Online (Sandbox Code Playgroud)


nor*_*DEV 7

Swift4 示例(如果您的MyCustomView.swiftMyCustomView.xib在框架中)。将其放在MyCustomView的 init 中:

let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "MyCustomView", bundle: bundle)
if let nibView = nib.instantiate(withOwner: self, options: nil).first as? UIView {
    self.aViewInMyCustomView = nibView
    self.aViewInMyCustomView.frame = self.frame
    self.addSubview(self.aViewInMyCustomView)
    // set constraints
    self.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0).isActive = true
    NSLayoutConstraint(item: self.aViewInMyCustomView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0).isActive = true
} 
Run Code Online (Sandbox Code Playgroud)


小智 6

在构建目标是我的iOS设备之一的情况下,我右键单击了产品文件(xyzw.app)并选择了Show in Finder弹出项.它打开了一个里面有xyzw.app的窗口; 我使用Show Package Contents打开了包,看到了我想要的所有文件,除了一个文件,它正在抱怨的那个,用一个大写我而不是名字中的小写i(zoomieVIew.nib而不是zoomieView.nib ).我注意到了xib文件名中的大写字母I,并将其更改并重建; 显然Xcode以生成的方式保留了生成的.nib名称.我删除了bundle中的zoomieVIew.nib,重建了,并且Xcode正确地将文件重新创建为zoomieView.nib.该应用程序开始在该设备上运行.


Wil*_*che 6

我在情节提要板上遇到了这个问题,笔尖被称为“ bKD-J3-fhr-view-ZSR-8m-2da”。

这是因为我试图在视图控制器的init(withCoder)中向self.view添加一个子视图。Self.view尚不存在。

将其移动到viewDidLoad,一切都更好!


Tom*_*ard 6

在Objective-C视图控制器中使用自定义Swift视图(是的,甚至在导入<<PROJECT NAME>>-Swift.h文件后),我尝试使用以下命令加载nib:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

...但是NSStringFromClass([MyCustomView class])返回<<PROJECT NAME>>.MyCustomView并且加载失败.TL; DR所有使用字符串文字加载笔尖都很好:

MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)


coo*_*994 6

插入 XIB 名称时不要输入 .xib!它已经暗示了!

不要这样做:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];
Run Code Online (Sandbox Code Playgroud)

做这个:

 UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];
Run Code Online (Sandbox Code Playgroud)


swi*_*Boy 6

对于故事板

我尝试了这里发布的每一个解决方案,但没有任何对我有用,因为我将 Storyboard 与 Swift 5 一起使用。

刚刚开始在故事板测试应用程序中构建新的控制器和视图,我发现我缺少我的视图控制器的故事板 ID。

所以这是我的解决方案,如果你想从 ViewController A --> View Controller B

步骤 1.在 storyboard 中:只需确保您的 ViewControllerA 嵌入在导航控制器中

第 2 步。在故事板中:现在检查您是否提到了 ViewControllerB 的故事板 ID,您将在代码中将其用作标识符。

在此处输入图片说明

第 3 步。最后确保您通过单击按钮在 ViewControllerA 中以这种方式推送控制器。

if let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerB") as? ViewControllerB {

            if let navigator = navigationController {
                navigator.pushViewController(viewControllerB, animated: true)
            }
        }
Run Code Online (Sandbox Code Playgroud)


Net*_*per 5

当您重命名 nib 文件时会发生这种情况。如果您已经创建了新的 nib(意味着将当前的 nib 文件内容复制到新的 nib),删除旧的 nib 文件,它将解决您的问题。

编辑:从新的 Xcode 4.6.3 版本开始,如果您重命名(使用重构功能)Controller 类,它也会重命名 nib 文件,您无需担心 nib 加载问题。


iCh*_*rag 5

看项目

Target -> Buid Phases -> Copy Bundle Resources

您会发现红色的xib / storyborad。

只需删除它,也可以从项目中删除所有丢失文件的引用。

现在,再次将此故事板/ xib文件拖到此文件上。Copy Bundle Resources它仍将显示红色文件,但不必担心。

只是清理并构建项目。

现在您将使您的项目再次成功运行!!