无法在捆绑中加载NIB
我正在尝试将Janrain Engage作为自定义模块与Appcelerator Titanium进行整合。 我已经创build了一个示例模块,并将JREngage文件夹拖到示例模块xcodeproj中,如Jainrain的文档中所示。
现在我给这个项目./build.py
命令,然后执行./build.py
,最后执行titanium run
命令。 它在模拟器中启动了一个空白屏幕的应用程序,并立即崩溃抛出以下错误。
终止应用程序由于未捕获的exception'NSInternalInconsistencyException',原因:'无法加载NIB的捆绑:'NSBundle </ Users / abhilash / Library / Application Support / iPhone Simulator / 4.2 / Applications / CA167346-4091-4E16-B841-955D1D391713 / test.app>(加载)'名称'JRProvidersController''
为什么会发生这个错误?
访问文件检查器中的.xib文件的属性,在select框中select属性“Target Membership”,然后将您的xib文件与您的目标链接
在目标 – >构build阶段确保.xib被添加到复制包资源,如果不存在,然后添加.xib文件
试图找出所有
XXXController = [[XXXControlloer alloc] initWithNibName:@"XXXController" bundle:nil];
在你的代码中,并确保XXXController
拼写正确
我有同样的问题(例外'无法加载捆绑NIB:..')后,我的Xcode从3.2升级到4.02。 而我的应用程序与Xcode 3.2的部署工作得很好,它崩溃与xcode 4引发上述exception – 但只有当我试图部署到IOS模拟器(v.4.2)。 针对IOS设备(v.4.1)也采用了Xcode 4。
事实certificate(经过几个小时的拼命争执),原因几乎是“隐藏”的.xib文件设置:
访问文件检查器中.xib文件的属性:对于所有.xib文件,属性“位置”已设置为“相对于组”。 我将其更改为“相对于项目”,瞧:所有.xib文件现在都正确加载在IOS模拟器!
我不知道这个奇怪的Xcode4行为背后的原因是什么,但也许值得做一个尝试?
在我的情况下,这是非常奇怪的(使用故事板):出于某种原因,它从“主要故事板文件基本名称”更改为“主要笔尖文件基本名称”在plist。
改回“主要故事板文件基本名称”(UIMainStoryboardFile)解决了这个问题
该错误意味着没有带"JRProvidersController"
名称的"JRProvidersController"
文件。 重新检查JRProvidersController.xib
是否存在。
你将加载.xib file
controller = [[JRProvidersController alloc] initWithNibName:@"JRProvidersController" bundle:nil];
构build目标是我的iOS设备之一,我右键单击产品文件(xyzw.app)并selectShow in Finderpopup菜单项。 它在里面打开了一个xyzw.app窗口。 我使用Show Package Contents打开了这个包,看到了我所期望的所有文件,除了一个文件,就是它所抱怨的文件,用大写字母I代替小写字母i(zoomieVIew.nib而不是zoomieView.nib )。 我已经注意到了xib文件名中的大写字母I,并将其更改并重build; 显然Xcode保留了生成的.nib名字的样子。 我删除了包中的zoomieVIew.nib,重新编译,Xcode正式将文件重新创build为zoomieView.nib。 该应用程序开始在设备上工作。
在Objective-C视图控制器中使用自定义Swift视图(是的,即使在导入<<PROJECT NAME>>-Swift.h
文件之后),我试图使用下面的命令来加载nib:
MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([MyCustomView class]) owner:self options:nil] objectAtIndex:0];
…但是NSStringFromClass([MyCustomView class])
返回<<PROJECT NAME>>.MyCustomView
和加载失败。 TL; DR All使用string文字很好地加载了nib:
MyCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0];
看项目
Target -> Buid Phases -> Copy Bundle Resources
你会发现你的xib / storyborad红色。
只要删除它。同时删除从项目丢失的文件的所有引用。
现在将这个storyboard / xib文件再次拖到这个Copy Bundle Resources
它仍然会显示红色的文件,但是不用担心。
只需清理和build立项目。
现在你将会让你的项目再次成功运行!
我有一个故事板的问题,笔尖被称为“bKD-J3-fhr-view-ZSR-8m-2da”。
这是因为我试图在视图控制器的init(withCoder)中添加一个子视图到self.view。 Self.view还不存在。
把它移动到viewDidLoad和所有更好的!
我也发现,当我尝试加载名为“MyFile.xib”的XIB时失败了。 当我刚使用@“MyFile”时,它显然工作 – 显然它总是添加扩展名。 但是错误消息只是说在包中找不到MyFile.xib,如果它说MyFile.xib.xib,那将是一个很大的线索。
工作在Xcode 4.6.3和本地化我的NIB文件我也遇到了这个问题。
对于我来说,除了将文件检查器中的“文档版本控制”更改为“部署5.0”而不是6.1之外,没有其他任何帮助。
我刚刚使用Xcode 6.3有一个有趣的经验。
我也不断地得到这个错误,尽pipe尝试了所有你通常会想到的拼写,目标成员等等,如上所述。 我也尝试清理,删除派生的数据,并从模拟器中删除应用程序多次,以确保捆绑正确构build,但无济于事。
最后,按照Brian Michael Bentley的回答,我最终决定在HD上的模拟器文件夹中检查我的.app文件。 我发现我所有的笔尖都在那里,但是用了abc〜ipad.nib而不是预期的abc.nib。 我手动重命名所有这些文件,以删除〜ipad的一部分,build成,它的工作!
试着去看看为什么这些被添加了〜ipad关键字,我查看了我的项目设置,事实上,在我的General> Deployment Info选项卡中,我只select了iPad。 我试图在iPhone模拟器上运行。 我相信在过去,Xcode会给出一个错误,指出该二进制文件不支持iPhone,并且你不会成功运行该应用程序。
我从模拟器中删除了应用程序,并再次做了同样的事情 – 再次只支持iPad。 这一次,.app包含abc〜iphone.nib和abc〜ipad.nib,用于每个预期的故事板,并且它在iPhone模拟器上运行得很好。 再次 – 如果我们只在我们的部署信息设置中selectiPad,它不应该在iPhone模拟器上运行。 这是一个Xcode错误。
所以,Xcode有一些不一致的行为,不幸的是它是一个间歇性的错误,这可能很难重现,但我把它放在这里,以便将来可以帮助其他人。
如果这个相同的问题没有任何工作,所以我觉得派生的数据奇怪。
在xcode 6.3.2中我必须:
在XCode菜单 – >首选项 – >位置选项卡 – >在位置中将派生数据更改为相对,然后切换回默认值
然后把笔尖装好。
您的XIB文件可能在您的项目文件夹之外。 这导致目标检查员没有出现。 但是,将XIB文件移动到您的项目文件夹应该修复它。
当您插入XIB名称时,请勿放入.xib! 这已经是暗示了!
不要这样做:
UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView.xib" owner:self options:nil][0];
做这个:
UIView *viewFromNib = [[NSBundle mainBundle] loadNibNamed:@"ResultsAssessmentView" owner:self options:nil][0];
在将旧代码从XCode 3x转换为XCode 4的时候遇到了这个问题,并且将wwwwwwww.xib重命名为RootViewController.xib
我遇到了同样的问题。 在我的情况下,笔尖名称是“MyViewController.xib”,我将其重命名为“MyView.xib”。 这摆脱了错误。
我也正在把一个项目从XCode 3移到4.2。 更改pathtypes并不重要。
另外原因可能是文件在错误的语言特定的文件夹中查找,当你与本地化混在一起。
每次我重构一个在我的appDelegate中的视图控制器的名字,我就浪费了时间。 重构不会更改initWithNibName中的nib名称:@“MYOldViewControllerName”。
它发生在你重命名笔尖文件。 如果您已经创build了新的笔尖(即将当前的笔尖文件内容复制到新的笔尖),请删除旧的笔尖文件,这样可以解决您的问题。
编辑:使用新的Xcode起始版本4.6.3,如果您重命名(与重构function)控制器类,它也将重命名笔尖文件,您不必担心笔尖加载问题。
我有同样的问题,重命名我的视图控制器标识符在故事板为我工作。
我注意到,如果你在git中的分支之间切换,并忘记做一个干净的事情可能会发生。 所以xib在那里,一切都find了,但确切的构build可能有问题。 所以为了以防万一,不要忘了做一个干净的
SecondViewController *secondViewController = [[SecondViewController alloc]initWithNibName:@"SecondView.xib" bundle:nil]; [self.navigationController pushViewController:secondViewController animated:YES];
在上面的代码中,如果你也给一个像“SecondView.xib”这样的文件扩展名,那么这是错误的,会给你上面的错误。 改用“SecondView”。 我犯了这个错误。
这是为我工作..确保你input正确的笔尖名称。
[[NSBundle mainBundle] loadNibNamed:@“Graphview”owner:self options:nil];
Graphview(笔尖名称)
如果您在项目中使用框架,则需要确保从正确的包中加载:
NSBundle *bundle = [NSBundle bundleWithIdentifier:@"<your bundle id here>"]; ABCViewController *vc = [[ABCViewController alloc] initWithNibName:@"<your nib name>" bundle:bundle];