检查.nib或.xib文件是否存在

时间:2009-05-28 23:29:17

标签: iphone objective-c xcode nib

在尝试使用initWithNibName:bundle:或类似文件加载Nib或Xib文件之前,检查Nib或Xib文件是否存在的最佳方法是什么?

3 个答案:

答案 0 :(得分:61)

#define AssertFileExists(path) NSAssert([[NSFileManager defaultManager] fileExistsAtPath:path], @"Cannot find the file: %@", path)
#define AssertNibExists(file_name_string) AssertFileExists([[NSBundle mainBundle] pathForResource:file_name_string ofType:@"nib"])

以下是您在尝试加载.xib.nib之前可以调用的一组宏,它们将帮助识别丢失的文件并发出有关错误内容的有用消息。

解决方案

<强>目标C

if([[NSBundle mainBundle] pathForResource:fileName ofType:@"nib"] != nil) 
{
    //file found
    ...
}

请注意,文档指出ofType:应该是文件的扩展名。但是,即使您使用的是.xib,也需要传递“@”nib“,否则您将获得假阴性。

<强>夫特

guard Bundle.main.path(forResource: "FileName", ofType: "nib") != nil else {
       ...
    }

(参见:touti的原始答案:https://stackoverflow.com/a/55919888/89035

答案 1 :(得分:0)

我在这里看到两种解决方案。

你可以调用initWithNibName:bundle:并在失败时捕获异常(我喜欢这个想法,感觉很健壮)。您可能希望验证该异常实际上是“未找到文件”异常,而不是例如“内存不足”异常。

或者,你可以先使用NSBundle的pathForResource:ofType:来检查是否存在nib,它会为不存在的文件返回nil。

答案 2 :(得分:0)

快速解决方案:

guard Bundle.main.path(forResource: "FileName", ofType: "nib") != nil else {
   ...
}