在尝试使用initWithNibName:bundle:
或类似文件加载Nib或Xib文件之前,检查Nib或Xib文件是否存在的最佳方法是什么?
答案 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 {
...
}
答案 1 :(得分:0)
我在这里看到两种解决方案。
你可以调用initWithNibName:bundle:并在失败时捕获异常(我喜欢这个想法,感觉很健壮)。您可能希望验证该异常实际上是“未找到文件”异常,而不是例如“内存不足”异常。
或者,你可以先使用NSBundle的pathForResource:ofType:来检查是否存在nib,它会为不存在的文件返回nil。
答案 2 :(得分:0)
快速解决方案:
guard Bundle.main.path(forResource: "FileName", ofType: "nib") != nil else {
...
}