Sconcertato a cercare di impostare cell.image utilizzando UIImage: imageNamed:

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

  •  06-09-2019
  •  | 
  •  

Domanda

Ho creato un plist contenente una struttura NSDictionary. La chiave è un'etichetta (che io uso per popolare cell.text Tableview) e il valore è un nome di file che voglio usare per 'dinamico' popolare cell.image. I nomi dei file png esatte vengono caricati nel progetto.

Per semplificare le cose (così ho pensato), carico la plist in un NSDictionary, poi tirare che a parte in due array (utilizzando allKeys e allValues).

Nel tentativo di impostare un'immagine di cellule, Non capisco perché questo funziona:

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

e questo non (nel simulatore - ricevo un incidente app e barfing debugger):

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

Posso mettere questa riga successiva a destra prima del secondo pezzo di codice e funziona bene, così sembra che sto ottenendo un NSString da objectAtIndex:

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

Ho anche provato a generare un NSString temp e assegnando [rowImageList objectAtIndex:] ad esso, quindi utilizzando quella NSString di fornire imageNamed:.

Ecco alcune informazioni da debugger:

  

- [lunghezza NSCFArray]: selettore non riconosciuto inviato esempio 0x262d910

     

Chiusura di applicazione a causa di non rilevata   eccezione   'NSInvalidArgumentException', la ragione:   '*** - [lunghezza NSCFArray]: non riconosciuta   selettore inviato ad esempio 0x262d910'

Fatemi sapere se avete bisogno di più informazioni / codice.

Edit: Ecco come io popolo 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

Ecco uno screenshot del mio plist: [IMG] [http://i42.tinypic.com/14uwffa.jpg] 1 [/ IMG]

Modifica: rivisto popolazione 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];
È stato utile?

Soluzione

Vorrei ricontrollare l'uscita dal NSLog () e assicurarsi che non è una matrice che contiene un NSString. Questo è ciò che l'errore che si sta dicendo; si sta passando un NSArray in cui è previsto un NSString.

Altri suggerimenti

Questo errore indica che [rowImageList objectAtIndex: indexPath.row] restituisce un array e non una stringa come previsto

.

Il motivo per cui viene stampato un valore è perché per stampare una matrice inoltre necessario specificare% @ nell'istruzione NSLog.

Prova il debug del metodo e controllare la classe di [rowImageList objectAtIndex: indexPath.row]. Sarà molto probabilmente rivelarsi un array.

Sei sicuro il vostro plist è coppie chiave / stringa, e non è stato in qualche modo avvolto i nomi in un array?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top