val*_*674 10 cocoa-touch xib ios
我失去了半天的时间来解决这个问题,我无法在线看到直接的解决方案.
我创建了一个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''
Run Code Online (Sandbox Code Playgroud)
我听说.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
Run Code Online (Sandbox Code Playgroud)
我试图将其分解为更多方法调用,并认为Nib本身正在创建:
UINib *nib = [UINib nibWithNibName:@"NUInAppMessageView"
bundle:frameworkBundle]; // fine (not nil)
NSArray *objects = [nib instantiateWithOwner:self options:nil]; // <-- CRASH
Run Code Online (Sandbox Code Playgroud)
我不再有想法了.我尝试使用项目清理,删除派生数据,但他们似乎没有做到这一点.
我在这里错过了什么吗?
Ran*_*man 11
我的回答的背景:
我试图导出一些UITableView相关的实现,它有UITableViewCell .xib文件包装.他们最后会变成.nib文件!;-)我指的是那些Nib文件如下:
[[NSBundle mainBundle] loadNibNamed:customCellID owner:nil options:nil];
Run Code Online (Sandbox Code Playgroud)
说明:
但是我做错了的是,我构建了一个静态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];
}
Run Code Online (Sandbox Code Playgroud)
我从我的UITableView实现中构建的框架没有再次给出上述错误!:-)
希望这个答案可能对那里的人有所帮助!
干杯! :-)
| 归档时间: |
|
| 查看次数: |
3581 次 |
| 最近记录: |