Проверка если.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 для файлов, которые не существуют.