Проверка, существуют ли .nib или .xib файл

Если вы используете плагин SpecFlow в Visual Studio , вы можете видеть, какие строки имеют привязки, а не те, которые не имеют подсветки. Кроме того, вы также можете нажать F12, чтобы перейти к элементам, имеющим привязки, сгенерировать привязку, которую можно вставить туда, где ее нет.

Также я не видел этот процесс генерации всех шагов за один раз, как вы описали выше. Честно говоря, это кажется немного нелогичным, поскольку в SpecFlow уже есть условия предупреждения о том, что шаги не существуют.

28
задан rjstelling 3 December 2010 в 11:49
поделиться

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 , они будут помочь идентифицировать отсутствующие файлы и выдать полезное сообщение о том, что именно отсутствует.

Решения

Objective-C :

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

Обратите внимание, что в документации указано, что ofType: должен быть расширение файла. Однако, даже если вы используете .xib, вам нужно передать `@" nib ", иначе вы получите ложноотрицательный результат.

Swift :

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

(См .: touti ). ответ: https://stackoverflow.com/a/55919888/89035 )

63
ответ дан 28 November 2019 в 02:54
поделиться

Я вижу здесь два решения.

Вы можете просто вызвать initWithNibName: bundle: и перехватить исключение в случае сбоя (мне нравится эта идея, она кажется надежной). Вы, вероятно, захотите убедиться, что исключение действительно является исключением «файл не найден», а не, скажем, исключением «нехватки памяти».

В качестве альтернативы вы можете сначала проверить наличие пера, используя pathForResource NSBundle : ofType :, который возвращает nil для файлов, которые не существуют.

0
ответ дан 28 November 2019 в 02:54
поделиться