Als meine erste App versuche ich, eine einfache navigationsbasierte numismatische Sammlungs-App zu beherrschen.
Es gibt einige Probleme mit Indizes in meinem Array, die mit .plist gefüllt sind. Plist hat 191 Datensätze; die normale Liste der Länder -> Element 0 - String - Albanien ... Element 190 - String - Vanuatu.
Ich habe diese Datensätze in mein temporäres Array eingelesen, um UITableView zu füllen.
NSString *countriesFile=[[NSBundle mainBundle]pathForResource:@"countries" ofType:@"plist"];
countries=[[NSArray alloc]initWithContentsOfFile:countriesFile];
Diese Tabellenansicht enthält Abschnitte -> Kontinente.
Mein Problem ist:
Wenn Sie auf eine andere Feder drücken, sollte diese die lesenName des Landes und zeigen Sie es in Kopfzeile und Bezeichnung. So auch, aber nur für europäische Länder. Wenn ich auf das Land eines anderen Kontinents tippe, sehe ich ein europäisches Land. Siehe Screenshots
Tippen Sie auf europäisches Land -> Belgien, zeigt rechts.
Umzug in die afrikanische Sektion:
Angola aufnehmen und Österreich bekommen.
Also, Angolas Index - 92. Österreich - 1. Aber Österreich und Angola sind beide die zweite Zelle in ihrer Heimatabteilung.
Wo ist das Problem und was wäre es?
Danke im Voraus.
Antworten:
0 für die Antwort № 1Ich gehe davon aus, dass Sie verwenden -(void)tableView: (UITableView*)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath
um festzustellen, wann Sie auf einen Eintrag in der Liste geklickt haben? Verwenden Sie auch [indexPath row]
(oder indexPath.row
) um den Index der Zeile herauszufinden, auf die Sie getippt haben?
Was zum row
Eigenschaftsrückgabe ist der Zeilenindex innerhalb deraktueller Abschnitt. Es wird NICHT der absolute Zeilenindex für die gesamte Tabelle zurückgegeben. Aus diesem Grund spielt es keine Rolle, ob Sie im ersten Abschnitt auf das Index-Zwei-Element oder im zweiten Abschnitt auf das Index-Zwei-Element klicken. row
wird in beiden Fällen 2 zurückgeben.
Eine Idee wäre, die .plist-Datei ein wenig zu ändern. Anstatt nur eine lange Reihe von Ländern zu haben, sollten Sie eine übergeordnete Reihe haben, die die Kontinente darstellt. Dann hat das Objekt für jeden Index in diesem Kontinent-Array ein anderes Array, das die Liste der Länder dort enthält.
-(void)tableView: (UITableView*)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath
{
NSUInteger section=[indexPath section];
NSUInteger row=[indexPath row];
NSString* countryName=[[plistArray objectAtIndex: section] objectAtIndex: row];
//rest of code...
}
0 für die Antwort № 2
Es hört sich so an, als würden Sie das nicht berücksichtigender Abschnittswert von indexPath. Ein indexPath besteht aus zwei Teilen, einem Abschnitt und einer Zeile. In Tabellen mit einem einzelnen Abschnitt lesen Sie normalerweise nur den Zeilenwert. In Ihrem Fall haben Sie anscheinend eine gruppierte Tabelle, sodass Sie sowohl indexPath.section als auch indexPath.row für den Datenspeicherort lesen müssen.