TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
Recibiendo esta advertencia mientras trabaja con TableViewController. ¿Cómo subsanar este error y qué bloque se ve afectado?
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
Recibiendo esta advertencia mientras trabaja con TableViewController. ¿Cómo subsanar este error y qué bloque se ve afectado?
Respuestas:
Éste aparece cuando alguien está tratando de poner nil
en[UIImage imageNamed:]
Agregue un punto de interrupción simbólico para [UIImage imageNamed:]
Agregue $arg3 == nil
condición en el simulador, $r0 == nil
condición en iPhone de 32 bits o $x2 == nil
en iPhone de 64 bits.
Ejecute su aplicación y vea dónde se detendrá el depurador.
PD: Tenga en cuenta que esto también sucede si el nombre de la imagen es una cadena vacía. Puede verificar esto agregando [(NSString*)$x2 length] == 0
a la condición.
UIImage imageNamed:
, pero de todos modos estoy guardando este punto de interrupción.
$arg3
sintaxis de los puntos de interrupción condicionales. ¿Dónde puedo aprender más?
error: use of undeclared identifier '$arg3'
. ¿Me he perdido algo?
(int)[$arg3 length] == 0
Este error (por lo general) ocurre cuando intenta cargar una imagen con [UIImage imageNamed:myImage]
pero iOS no está seguro de si myImage
es realmente una NSString
y luego aparece esta advertencia.
Puedes arreglar esto usando:
[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]
O simplemente puede buscar length
el nombre del UIImage
:
if (myImage && [myImage length]) {
[UIImage imageNamed:myImage];
}
Dado que el error es quejarse de que el nombre que dio es (null)
, lo más probable es que esto se deba a la llamada [UIImage imageNamed:nil]
. O más específicamente, no se ha establecido pasar una variable, por lo que es igual a nil
. Si bien el uso stringWithFormat:
eliminaría el error, creo que es muy probable que no esté haciendo lo que quieres. Si el nombre que proporcionas es un nil
valor, entonces el uso de stringWithFormat: daría como resultado la búsqueda de una imagen que se llama literalmente "(nulo)", como si estuvieras llamando [UIImage imageNamed:@"(null)"]
.
Algo como esto es probablemente una mejor opción:
if (name) {
UIImage *image = [UIImage imageNamed:name];
} else {
// Do something else
}
Es posible que desee establecer un punto de interrupción en Xcode en esa línea "Hacer algo más", para ayudarlo a descubrir por qué este código se llama con un valor nulo en primer lugar.
En Xcode 6.4, esto parece ocurrir cuando se usa "Imagen seleccionada" para un elemento de la barra de pestañas en el guión gráfico, incluso si es una imagen válida.
En realidad, esto no parece establecer la imagen de estado seleccionada de todos modos, por lo que debe definirse en Atributos de tiempo de ejecución definidos por el usuario y eliminarse del atributo Imagen seleccionada del elemento de la barra de pestañas
En mi caso, estaba pasando [UIImage imageNamed: @ ""], lo que me hizo mostrar la advertencia. Simplemente agregue puntos de interrupción a todas las líneas donde ha usado imageNamed y depure la línea donde encuentra la advertencia.
[UIImage imageNamed:@""]
. ¿Cómo lo arreglaste?
if
para probar si el nombre de la imagen no es una cadena vacía, o usar una imagen "noImage" predeterminada, ¿cómo no muestra ninguna imagen cuando no se aplica ningún nombre aplicable y los Activos no contienen una imagen "noImage"?
Esto me sucedió después de que un guión gráfico se dividiera en varios (el cambio real ocurrió cuando estaba de vacaciones, así que no sé exactamente cómo se hizo).
Después de inspeccionar el XML de los guiones gráficos, encontré que una referencia de imagen que anteriormente había apuntado a "bottomBar" en el catálogo de activos en su lugar apuntaba a imageView:fFo-1g-jzs:image
.
Al final del archivo XML, debajo de la <resources>
etiqueta, se nombró <image name="imageView:fFo-1g-jzs:image">
una etiqueta que contiene una gran mutableData
mancha.
Después de restablecer la referencia de la imagen en el guión gráfico y eliminar el blob, el error desapareció.
Está proporcionando un nombre de imagen no válido, por lo que debe validarlo antes de colocarlo, puede hacer cualquiera de las formas anteriores, lo que tenga sentido para su código o me gusta
if (iconImageName && [iconImageName length])
{
[UIImage imageNamed:iconImageName];
}
else
{
iconImageName.hidden = YES;
}
¡Espero que te ayude!
La razón del error es pasar un valor nulo al método "imageNamed:". Para evitar esto, puede ocultar su imageView cuando intente pasar el valor nulo. Las posibilidades pueden ocurrir al reutilizar imageViews en UITableView o pueden estar en scrollViews.
Evité la advertencia con la siguiente verificación:
UIImageView *your_image_view;
NSString *imageName;
if(imageName && imageName.length){
your_image_view.hidden = NO;
your_image_view.image = [UIImage imageNamed:imageName];
}
else {
your_image_view.hidden = YES;
}
Un enfoque es hacer swizzling del método de clase para reemplazarlo [UIImage imageNamed:]
con su propia implementación, luego verifique el nombre de la imagen en su implementación. Vea lo siguiente:
¿Cómo cambiar un método de clase en iOS?
Implementé esto en mi categoría UIImage (Debug):
+ (UIImage *)db_imageNamed:(NSString *)imageName {
if ([imageName length] == 0) {
NSLog(@"breakpoint here");
}
return [self db_imageNamed:imageName]; // not a recursive call here after swizzling
}
Es posible que también desee swizzle [UIImage imageNamed:inBundle:compatibleWithTraitCollection:]
.
Tal vez puedas usar esto para confirmar que "imageName" no es un "nulo", entonces dejarás de lado esta advertencia.
if (imageName) {
self.imageView.image = [UIImage imageNamed:imageName];
}