无法将 xib 文件存储到自己的包中
Posted
技术标签:
【中文标题】无法将 xib 文件存储到自己的包中【英文标题】:Failing to store xib files to an own bundle 【发布时间】:2017-05-02 08:00:30 【问题描述】:在我的项目中,我创建了一个自己的设置包(称为 UIBundle),并将一些 xib 文件拖到其中。然后我尝试从包中加载它们,例如这个表视图单元格 xib:
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"MyCell";
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
NSArray *nib = [[self xibsBundle] loadNibNamed:@"MyCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
return cell;
- (NSBundle *) xibsBundle
NSString *path = [[NSBundle mainBundle] pathForResource:@"UIBundle" ofType:@"bundle"];
return [NSBundle bundleWithPath:path];
但是每次我运行我的应用程序时,它都会在尝试加载带有以下消息的单元格时崩溃:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/containers/Bundle/Application/.../App.app/UIBundle.bundle> (not yet loaded)' with name 'MyCell''
花了一天时间寻找解决方案,但没有成功。任何帮助,将不胜感激。
附注Bundle 已成功加载,并且可以访问除 xib 文件之外的任何其他资源。
【问题讨论】:
也许这个问题对你有帮助? ***.com/questions/9904615/…您的捆绑包是否已检索并且其他内容是否可以访问? @Lepidopteron 嗨。除了 xib 文件之外的任何其他资源都可以访问。 您是否尝试过这种方法,以这种方式将资源作为库添加到您的捆绑包中? galloway.me.uk/tutorials/ios-library-with-resources 【参考方案1】:尝试使用 NSBundle 类的类方法 bundleWithIdentifier:。
- (NSBundle *) xibsBundle
return [NSBundle bundleWithIdentifier:@"UIBundle"];
或
如果您知道捆绑包的路径,请尝试使用以下内容:
myBundle = [NSBundle bundleWithPath:@"Path\to\UIBundle"];
有关更多信息,请参阅: https://developer.apple.com/library/content/documentation/CoreFoundation/Conceptual/CFBundles/AccessingaBundlesContents/AccessingaBundlesContents.html
【讨论】:
这个方法在我的例子中返回 nil。 你知道包的路径吗?如果是,请尝试使用以下命令:myBundle = [NSBundle bundleWithPath:@"Path\to\UIBundle"]; 捆绑包的路径是已知的,它也已成功加载,正如他的问题的 cmets 所示。也许问题可以更新。【参考方案2】:解决我的问题的唯一方法是按照以下步骤操作:
-
创建一个类型为:MacOS 平台的 XCode 项目。
从Framework & Library部分选择Bundle。
然后将所有xib文件添加到项目中。
将 Base SDK 从 Build Settings 更改为
Latest iOS
。
构建项目。
然后展开产品文件夹并打开捆绑文件。
必须有所有的 nib 文件。
我将它们复制到我自己的包中,一切正常。
【讨论】:
以上是关于无法将 xib 文件存储到自己的包中的主要内容,如果未能解决你的问题,请参考以下文章
如何正确地将资源 (*.res) 文件添加到带有组件的包中?
xcassets 中的所有图像,然后如何加载从我的包中的 nib 引用的图像