Pregunta

¿Cuál es la mejor manera de comprobar si existe un archivo de plumilla o Xib antes de intentar cargarlo utilizando initWithNibName:bundle: o similar?

¿Fue útil?

Solución

macro

#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"])

Aquí hay un conjunto de macros que puede llamar antes de intentar una carga o un .xib .nib, que le ayudará a identificar los archivos que faltan y escupió mensaje útil acerca de lo que está faltando.

Soluciones

Objetivo-C :

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

Tenga en cuenta que la documentación indica que ofType: debe ser la extensión del archivo. Sin embargo, incluso si está utilizando .xib que necesita para aprobar `@ "semilla" o se obtendrá un resultado falso negativo.

Swift

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

(Véase: TOUTi respuesta original 's: https://stackoverflow.com/a/55919888/89035 )

Otros consejos

Hay dos soluciones que veo aquí.

Se podía llamar initWithNibName: paquete: y capturar una excepción si falla (me gusta esta idea, se siente robusta). Es probable que desee para verificar que la excepción es de hecho una excepción "archivo no encontrado" en lugar de, digamos, un "fuera de la memoria" es una excepción.

Como alternativa, se puede comprobar la existencia de la punta primero, usando pathForResource de NSBundle:. OfType :, que devuelve nil para archivos que no existen

Solución para SWIFT:

guard Bundle.main.path(forResource: "FileName", ofType: "nib") != nil else {
   ...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top