iPhone: proplem mit Tischansicht
-
26-10-2019 - |
Frage
Ich habe ein Problem mit der Tabellenansicht im iPhone. Ich kann nicht herausfinden
- (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;
}
Es stürzt in der Zeilenzelle ab. und erzählt mir, dass die App aufgrund der ungekordenen Ausnahme 'nsinvalidargumentException', Reason: '-[__ NSCFDictionary ObjectatIndex:]: Nicht anerkannter Selektor gesendet an die Instanz gesendet werden
Lösung
Das Animals
Der Schlüssel in Ihrem Plan bezieht sich auf ein Wörterbuch, nicht auf ein Array. Wörterbücher haben keine garantierte Reihenfolge. Wenn Sie also nach einem Objekt in einem bestimmten Index fragen, ist dies nicht sinnvoll.
Darüber hinaus haben Sie ein Speicherleck - plistDict
wird zugewiesen, aber nie freigelassen. Haben Sie den statischen Analysator über Ihren Code ausgeführt?
Andere Tipps
[plistDict objectForKey:@"Animals"];
Gibt ein Wörterbuch nicht ein Array zurück, wie Sie es erwarten. Sie müssen Ihre Plist -Datei überprüfen, um festzustellen, ob die Daten korrekt sind.
Der Fehler scheint, dass Sie aufrufen objectAtIndex
auf einem nsdictionary -Objekt an der Zeilenzelle Überprüfen Sie, was Tier zur Laufzeit enthält. Verwenden Sie NSLog vor dieser Zeile. Nslog (@"%@", Tiere);
Sieht aus wie animals
ist einige dictionary
Und du rufst an objectAtIndex:
Methode darauf. objectAtIndex
: ist NSArray
Methode.