将.xib文件放在框架项目中的哪里?

我失去了半天的时间来解决这个问题,我无法在网上看到直接的解决方案。

我创建了一个iOS CocoaTouch框架。 我有一些私人和公共课程,一切正常。 问题是当我在该框架中添加.xib文件时

在我的框架内,我想实例化.xib文件,我得到的错误是:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle  (loaded)' with name 'NUInAppMessageView'' 

我听说.xib文件不能包含在静态库中,但我认为它们应该能够在框架内使用。

我的框架目标包含之前的“Copy Bundle Resources”,当我在框架项目中创建它时,自动添加了这个.xib文件。

在此处输入图像描述

我已经在一些地方读过,应该在一个单独的地方添加资源。 捆绑目标,但在创建新目标时没有“捆绑”选项,我相信这是旧的静态库日。

这是我用来初始化我的视图的代码(在框架内):

 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 

我不再有想法了。 我尝试使用项目清理,删除派生数据,但他们似乎没有做到这一点。

我在这里错过了什么吗?

在iOS项目中将Nib文件放在框架中的位置?

我的回答背景:
我试图导出一些与UITableView相关的实现,它有UITableViewCell .xib文件。 他们最后会变成.nib文件! ;-)我指的是那些Nib文件如下:

 [[NSBundle mainBundle] loadNibNamed:customCellID owner:nil options:nil]; 

说明:
但是我做错了的是,我构建了一个静态Cocoa Touch Framework并尝试在另一个Application中使用它。 那么在运行时什么会成为MainBundle ? 绝对是我的UITableView实现试图找到App的主要包中的customCellID的Nib文件。

回答:
所以我修改了我的UITableView实现的上面的代码片段,如下所示:

  NSString *frameworkBundleId = @"com.randika.MyFrameworkBundleIDHere"; NSBundle *resourcesBundle = [NSBundle bundleWithIdentifier:frameworkBundleId]; customCell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:customCellID]; if (customCell == nil) { NSArray *nibs = [resourcesBundle loadNibNamed:emptyCellID owner:nil options:nil]; customCell = [nibs objectAtIndex:0]; } 

我用UITableView实现构建的框架没有再次出现上述错误! 🙂

希望这个答案可能对那里的人有所帮助!

干杯! 🙂