Comprobar si existe un archivo o .nib .xib
-
06-09-2019 - |
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?
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 {
...
}