我的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文件?
答案 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)
并参考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")
}