Sconcertato a cercare di impostare cell.image utilizzando UIImage: imageNamed:
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] [] 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];
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?