initWithNibName:bundle:
在尝试使用或类似方法加载之前检查 Nib 或 Xib 文件是否存在的最佳方法是什么?
问问题
10895 次
3 回答
68
宏
#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"])
这是一组宏,您可以在尝试加载 a.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 )
于 2009-05-31T13:06:25.340 回答
3
快速解决方案:
guard Bundle.main.path(forResource: "FileName", ofType: "nib") != nil else {
...
}
于 2019-04-30T11:25:41.587 回答
0
我在这里看到两种解决方案。
您可以只调用 initWithNibName:bundle: 并在异常失败时捕获异常(我喜欢这个想法,感觉很健壮)。您可能想要验证该异常实际上是“找不到文件”异常,而不是“内存不足”异常。
或者,您可以先检查 nib 的存在,使用 NSBundle 的 pathForResource:ofType:,它为不存在的文件返回 nil。
于 2009-05-28T23:41:23.070 回答