如何从我的cocoapod加载xib文件?

时间:2014-08-21 18:06:13

标签: ios cocoapods

我的xib文件位于我的Pod的Assets文件夹中。

s.resources = 'Pod/Assets'

xib文件显示在我的工作区中可可豆荚的Development Pods组中。我正试图像这样访问xib。

[[NSBundle mainBundle] loadNibNamed:@"LabeledTextFieldView" owner:self options:nil];

但是我得到了以下崩溃

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/jeff.wolski/Library/Application Support/iPhone Simulator/7.1/Applications/775EB653-519B-4FCF-8CD9-92311E205598/LT-Components-iOS.app> (loaded)' with name 'LabeledTextFieldView''

为什么捆绑中找不到xib文件?

6 个答案:

答案 0 :(得分:5)

问题是您的资源文件未包含在mainBundle中,您应该查看某些NSBundle docs并使用bundleForClass:之类的内容来获取正确的包来加载来自xib[NSBundle allBundles的输出也可能提供信息。

答案 1 :(得分:5)

s.resources文件夹不会自动递归到子目录。我必须指定xib文件的完整相对路径。

答案 2 :(得分:3)

您可以在库podspec中使用s.resources。添加s.resources = 'FOLDER_INCLUDES_XIB_FILES/*.xib'。并使用xib文件启动您的课程

<强>目标C

NSBundle *bundle = [NSBundle bundleForClass:self.classForCoder];
UINib *nib = [[bundle loadNibNamed:@"YOUR_XIB_FILE_NAME" owner:nil options:nil] firstObject];

Swift 3 Swift 4

let bundle = Bundle(for: self.classForCoder())
return bundle.loadNibNamed("YOUR_XIB_FILE_NAME", owner: nil, options: nil)?.first

答案 3 :(得分:3)

你需要{podName} .podspec

中的所有笔尖
s.resource_bundles = {
'{podName}' => ['{podName}/Classes/*.xib']

}

以及何时需要声明新视图

NSBundle *podBundle = [NSBundle bundleForClass:[viewController class]];
id data = [podBundle URLForResource:@"{podName}" withExtension:@"bundle"];
NSBundle *bundle = [NSBundle bundleWithURL:data];
viewController *view = [[viewController alloc]initWithNibName:@"viewController" bundle:bundle];

将{podName}替换为您的项目名称

答案 4 :(得分:1)

I run to this issue, enter image description here

并参考Keith Smiley的回答,我去看看文档:

我最终从Class更改了bundle init方法,如下所示:

NSBundle *bundle = [NSBundle bundleForClass:[EBBannerView class]];
NSArray *banners = [bundle loadNibNamed:@"EBBannerView" owner:nil options:nil];

然后它工作正常。

答案 5 :(得分:0)

在这里,您需要将其添加到您的pod规范中。

 s.resources = "YourProjectName/*.xib"
 s.resource_bundles = {
   'YourProjectName' => [
       'Pod/**/*.xib'
   ]
 }

然后从包中检索xib文件,如下所示: -

 let podBundle = Bundle(for:YourClassName.self)
    if let bundleURL = podBundle.url(forResource: "YourProjectName", withExtension: "bundle") {
        if let bundle = Bundle(url: bundleURL) {
            let cellNib = UINib(nibName: "nibFileName", bundle: bundle)
            navigationTableView.register(cellNib, forCellReuseIdentifier: "nibFileReuseIdentifierName")
        } else {
            assertionFailure("Could not load the bundle")
        }
    } else {
        assertionFailure("Could not create a path to the bundle")
    }