找出运行时是不是存在 XIB

Posted

技术标签:

【中文标题】找出运行时是不是存在 XIB【英文标题】:Find out if XIB exists at runtime找出运行时是否存在 XIB 【发布时间】:2014-03-11 10:10:23 【问题描述】:

还有办法吗?

我在 NSBundle 上尝试过pathForResource:ofType:,但当它真的存在时它却找不到 xib。如果我尝试加载它并且它不存在 loadNibNamed:owner:options: 崩溃,nibWithNibName:bundle: 也是如此

基本上,我想知道在运行时我应该为集合视图上的给定单元格类型注册一个 xib 还是只注册一个类。

【问题讨论】:

“我在 NSBundle 上试过 pathForResource:ofType:”,什么意思? @Danyun 我已经编辑了回复。 【参考方案1】:

您确定pathForResource:ofType: 不起作用吗?这不仅仅是常见的 xib / nib 混淆?

(.xib 文件为 ofType:@"nib")...

NSBundle *mainBundle = [NSBundle mainBundle];
NSString *path = [mainBundle pathForResource:@"crapXib" ofType:@"nib"]; // file is called crapXib.xib
if (path)
    // whatever...
 else
    // whatever else

【讨论】:

它有效。列出主包中的所有文件,您将看到 *.xib 更改为 *.nib【参考方案2】:

您可以尝试使用NSFileManager 来检查文件是否存在,如果应用程序未本地化,则所有.nibs 都位于.ipa 的根目录中,例如:

NSString * root = [[NSBundle mainBundle] resourcePath];
if ([[NSFileManager defaultManager] fileExistsAtPath: [root stringByAppendingPathComponent:@"MainViewController.nib"]])

    // exisits

【讨论】:

@Daij-Djan,感谢您的评论,您认为使用pathForResource:ofType:inDirectory:forLocalization: 更好吗? no pathForResource:ofType: 自动检查语言。你需要多次致电pathForResource:ofType:inDirectory:forLocalization: 来弥补它

以上是关于找出运行时是不是存在 XIB的主要内容,如果未能解决你的问题,请参考以下文章

运行时xib下载?

应用程序在设备上运行时 XIB 文件格式错误

.Xib 在使用 Xcode 4.6.1 运行项目时产生错误

用户定义的运行时属性导致来自 xib 的 EXC_BAD_ACCESS

在xib中设置accessibilityIdentifier nil时,必须从用户定义的运行时属性中设置

iPhone SDK,在运行时替换 XIB/NIB 文件 onViewDidAppear 或任何时间?