Desconcertado al tratar de establecer cell.image usando UIImage: imageNamed:

StackOverflow https://stackoverflow.com/questions/937957

  •  06-09-2019
  •  | 
  •  

Pregunta

He creado un plist que contiene una estructura NSDictionary. La clave está en una etiqueta (que uso para poblar cell.text tableview) y el valor es un nombre de archivo que desea utilizar para cell.image 'dinámica' poblar. Los nombres de archivo png exactas se cargan en el proyecto.

Para facilitar las cosas (así que pensé), me carga el plist en un NSDictionary, a continuación, tire de que, aparte en dos matrices (usando AllKeys y allValues).

En el intento de establecer una imagen de celda, yo no entiendo por qué esto funciona:

cell.image = [UIImage imageNamed:@"bad.png"];

y esto no (en el simulador - me sale un accidente de aplicación y barfing en depurador):

cell.image = [UIImage imageNamed:[rowImageList objectAtIndex:indexPath.row]];

Puedo poner esta línea siguiente justo antes de la segunda pieza de código y funciona muy bien, por lo que parece que estoy recibiendo un NSString de objectAtIndex:

NSLog(@"Image name: %@", [rowImageList objectAtIndex:indexPath.row]);

He intentado también la creación de un NSString temperatura y la asignación [rowImageList objectAtIndex:] para que, a continuación, utilizando NSString que para abastecer imageNamed:.

Aquí hay alguna información de depuración:

  

- [longitud NSCFArray]: selector no reconocido enviado a la instancia 0x262d910

     

Terminación de aplicación debido a la no detectada   excepción   'NSInvalidArgumentException', por:   '*** - [longitud NSCFArray]: no reconocido   Selector enviado a instancia 0x262d910'

Quiero saber si necesita más información / código.

Edit: He aquí cómo lo pueblan rowImageList:

NSArray *myRowImages = [[NSArray alloc] init]; 
myRowImages = [searchFilterList allValues]; 
self.rowImageList = [myRowImages copy]; 
[myRowImages release]; 
//where searchFilterList is an NSDictionary that I loaded from a plist

Aquí hay una captura de pantalla de mi plist: [IMG] [http://i42.tinypic.com/14uwffa.jpg] 1 [/ IMG]

Editar: revisada población rowImageList:

 NSMutableArray *myRowImages = [[NSMutableArray alloc] init];
 NSEnumerator *enumerator = [searchFilterList objectEnumerator];
 id object;

 while ((object = [enumerator nextObject])) {
     [myRowImages addObject:[object objectAtIndex:0]];
 }
 self.rowImageList = myRowImages; //edit: added self. prefix
 [myRowImages release];
¿Fue útil?

Solución

Me compruebe de nuevo la salida de NSLog () y asegúrese de que no es una matriz que contiene un NSString. Eso es lo que el error le está diciendo; estás pasando un NSArray donde se espera un NSString.

Otros consejos

Este error significa que [rowImageList objectAtIndex: indexPath.row] está volviendo una matriz y no una cadena como se esperaba

.

La razón por la cual se imprime un valor se debe a que para imprimir una matriz también es necesario especificar% @ en la declaración NSLog.

Trate depurar el método y comprobar la clase de [rowImageList objectAtIndex: indexPath.row]. Es muy probable que llegar a ser una matriz.

¿Está seguro de su plist se pares clave / cadena, y no lo ha envuelto de alguna manera los nombres en una matriz?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top