/ / UITableView + .plist + UINavigationController-Problem - Ziel-c, ios, ios4

UITableView + .plist + UINavigationController Problem - Ziel-c, ios, ios4

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.

RootViewController meiner App

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.

Bildbeschreibung hier eingeben

Umzug in die afrikanische Sektion:

Bildbeschreibung hier eingeben

Angola aufnehmen und Österreich bekommen.

Bildbeschreibung hier eingeben

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 № 1

Ich 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.