我花了半天的时间琢磨这个问题,但在网上找不到简单直接的解决方案。
我创建了一个iOS CocoaTouch框架,其中包含一些私有和公共类,所有内容都正常工作。问题在于当我在该框架中添加.xib文件时。
在我的框架内部,我想实例化 .xib 文件,但是我收到的错误信息是:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/dino/Library/Developer/CoreSimulator/Devices/FEDECDC2-D4EA-441E-B53B-329A5B3DFB7A/data/Containers/Bundle/Application/78CEC01F-4C36-4143-A7D6-DDE6CCAC801B/MyApp.app> (loaded)' with name 'NUInAppMessageView''
我听说.xib文件不能包含在静态库中,但我认为它们应该能够在框架内使用。
我的框架目标之前包含了“复制捆绑资源”,当我在框架项目内创建它时,这个 .xib 文件被自动添加进去。
我在几个地方看到过资源应该在一个单独的 .bundle 目标中添加,但是在创建新目标时没有“bundle”选项,并且我认为这来自于旧的静态库时代。
这是我在框架内使用的初始化视图的代码:
NSBundle * frameworkBundle = [NSBundle bundleForClass:[self class]]; // fine (not nil)
NUInAppMessageView *view = [[frameworkBundle loadNibNamed:@"NUInAppMessageView" owner:self options:nil] firstObject]; // <-- CRASH
我尝试将其拆分为更多的方法调用,并发现 Nib 本身正在被创建:UINib *nib = [UINib nibWithNibName:@"NUInAppMessageView"
bundle:frameworkBundle]; // fine (not nil)
NSArray *objects = [nib instantiateWithOwner:self options:nil]; // <-- CRASH
我再也没有什么想法了。 我试过使用项目 Clean,删除派生数据,但它们似乎没有起作用。
我错过了什么?