Проверка если.nib или.xib файл существует
каков наилучший способ проверить, существует ли файл Nib или Xib, прежде чем пытаться загрузить его с помощью initWithNibName:bundle:
или похожие?
2 ответов
макрос
#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
, Они помогут определить недостающие файлы и выплюнуть полезное сообщение о том, что именно отсутствует.
решение
фактическое используемое решение было:
if([[NSBundle mainBundle] pathForResource:fileName ofType:@"nib"] != nil)
{
//file found
...
}
обратите внимание, что в документации, что ofType:
должно быть расширение файла. Однако даже если вы используете .xib вам нужно пройти ' @ " nib " или вы получите ложноотрицательный.
есть два решения, которые я вижу здесь.
вы можете просто вызвать initWithNibName: bundle: и поймать исключение, если оно не сработает (мне нравится эта идея, она кажется надежной). Вероятно, вы захотите проверить, что исключение на самом деле является исключением "файл не найден", а не, скажем, исключением "из памяти".
кроме того, вы можете проверить наличие ниб-первых, с помощью NSBundle по pathForResource:метод oftype:, который возвращает nil для файлов, которые не существуют.