iphone: problème avec vue sur la table
-
26-10-2019 - |
Question
J'ai un problème avec vue sur la table iphone .. je ne peux pas comprendre pourquoi il se bloque à chaque fois sera ici est le code
- (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;
}
il est plantages à la ligne cell.textLabel.text = [objectAtIndex animaux: ligne]; et me dit que Mettre fin à l'application du fait exception uncaught 'NSInvalidArgumentException', raison: « - [__ NSCFDictionary objectAtIndex:]: sélecteur non reconnu envoyé à l'instance
La solution
La touche Animals
dans votre plist fait référence à un dictionnaire, pas un tableau. Les dictionnaires ne sont pas un ordre garanti, pour demander un objet à un index particulier n'a pas de sens.
En plus de cela, vous avez une fuite de mémoire - plistDict
est allouée, mais jamais sorti. Avez-vous exécutez l'analyseur statique sur votre code?
Autres conseils
[plistDict objectForKey:@"Animals"];
retourne un dictionnaire pas un tableau comme vous attendez. Vous devez vérifier votre fichier plist pour voir si les données sont correctes.
l'erreur semble que vous appelez objectAtIndex
sur un objet NSDictionary à la ligne cell.textLabel.text = [animaux objectAtIndex: ligne]; vérifier ce que fait l'animal contient au moment de l'exécution. Pour cette utilisation NSLog avant cette ligne. NSLog (@ "% @", animaux);
On dirait animals
est une dictionary
et vous appelez méthode objectAtIndex:
sur elle. objectAtIndex
:. est la méthode de NSArray