iphone: problema con vista tabella
-
26-10-2019 - |
Domanda
Ho un problema con la visualizzazione della tabella in iphone .. non riesco a capire il motivo per cui si blocca ogni volta sarà qui è il codice
- (void)viewDidLoad
{
[self checkAndCreatePList];
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:pListPath];
self.animals = [plistDict objectForKey:@"Animals"];
[super viewDidLoad];
}
-(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath
{
static NSString *SimpleTableIdentifier =@"SimpleTableIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if(cell== nil){
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SimpleTableIdentifier]autorelease];
}
NSUInteger row = [indexPath row];
cell.textLabel.text = [animals objectAtIndex:row];
return cell;
}
è crash alla linea cell.textLabel.text = [animali objectAtIndex: riga]; e mi dice che Chiusura di applicazione a causa di eccezione non identificata 'NSInvalidArgumentException', la ragione: '- [__ NSCFDictionary objectAtIndex:]: selettore non riconosciuto inviato ad esempio
Soluzione
La chiave Animals
nel plist si riferisce ad un dizionario, non è un array. I dizionari non hanno un ordine garantito, in modo da chiedere un oggetto a un determinato indice non ha senso.
In aggiunta a questo, si ha una perdita di memoria - plistDict
viene allocata ma mai rilasciato. Hai eseguito l'analizzatore statico sopra il vostro codice?
Altri suggerimenti
[plistDict objectForKey:@"Animals"];
restituisce un dizionario non un array come vi aspettate. È necessario controllare il file plist per verificare se i dati sono corretti.
l'errore sembra che si sta chiamando objectAtIndex
su un oggetto NSDictionary alla linea cell.textLabel.text = [animali objectAtIndex: riga]; controllare che cosa contiene animale in fase di esecuzione. Per questo uso NSLog prima di questa linea. NSLog (@ "% @", animali);
appare come animals
qualche dictionary
e si sta chiamando il metodo objectAtIndex:
su di esso. objectAtIndex
:. è il metodo NSArray