无法将 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 文件存储到自己的包中的主要内容,如果未能解决你的问题,请参考以下文章

Swift 包中的 XIB 文件 - 忽略约束

如何正确地将资源 (*.res) 文件添加到带有组件的包中?

SSIS包中的错误将数据加载到azure数据仓库中

xcassets 中的所有图像,然后如何加载从我的包中的 nib 引用的图像

如何使用Spring Boot从不同的包中自动装配存储库接口?

将 .java 文件导入正确的包中