无法将xib文件存储到自己的包中

时间:2017-05-02 08:00:30

标签: ios objective-c xib nsbundle

在我的项目中,我创建了一个自己的设置包(称为UIBundle),并将其拖到一些xib文件中。然后我试图从bundle加载它们,例如这个表视图单元格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'' 

花了一天时间找不到成功的解决方案。任何帮助,将不胜感激。

P.S。 Bundle已成功加载,除了xib文件之外的任何其他资源都可以访问。

2 个答案:

答案 0 :(得分:0)

尝试使用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

答案 1 :(得分:0)

解决我的问题的唯一方法是按照以下步骤操作:

  1. 使用类型:MacOS platform创建一个XCode项目。
  2. 框架&amp;部分开始图书馆选择捆绑
  3. 然后将所有xib文件添加到项目中。
  4. 将基础SDK从构建设置更改为Latest iOS
  5. 构建项目。
  6. 然后展开Products文件夹并打开包文件。 必须有所有的nib文件。
  7. 我将它们复制到我自己的包中,一切正常。