• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Wie ist es am einfachsten

Miralem23

Kaiser Wilhelm
Registriert
24.11.08
Beiträge
178
Wie ist es am einfachsten
Ich habe hier eine kleine Anwendung.

Diese funktioniert mit TableViews. Eigentlich ganz simpel.


Die erste TableView bezieht Ihre Daten aus einer .plist - so eine Art Überkategorie VW, Audi, Mercedes

Wenn ich nun auf Audi klicke öffnet sich eine eine TableView (pushViewController) mit allen Audi-Modellen, diese Modelle stehen auch alle in der .plist, in einer Zeile mit dem key: MODELLE
Diese werden dann als string ausgelesen und componentsSeparatedByString:mad:", " wird angewendet und in ein Array geschmiessen dass so die diese zweite TableView mit allen Modellen von Audi füttert.


Nun komm ich zum letzten, wie bewerkstellige ich am einfachsten den letzten Schritt: Der Benutzer klickt auf Audi -> AudiModelle erscheinen(A1, A2, A3, A4, A5, A6, A8 etc) und dieser klickt auf die Zelle/Zeile Audi A4,

Nun soll sich wieder per pushViewController ein neuer Controller öffnen der, dass Bild und einen kleinen Werbetext zu diesem Auto enthält zeigen.

Meine Frage, wo schreibe ich diese Daten hin, in eine neue plist, oder in dies selbe wo schon die Automarken und Automodelle stehen? Und wie soll der Ansatz programmatisch aussehen?

Nach Möglichkeit sollte das so einfach aussehen, wie ich das mit den Marken und Modellen gelöst habe

Code:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic may go here. Create and push another view controller.
   
   modelleString = [[beschwerden objectAtIndex:indexPath.row]objectForKey:MODELLE];  //Die Modelle, die in der plist als ein String stehen, werden in modelleString geladen
   modelleArray = [modelleString componentsSeparatedByString:@", "];                                //modelleString   wird hier nach   ,   separiert und in das Array geladen
   

        //modelleController ist eine  Subklasse des UITableViewController

   modelleController = [[ModelleController alloc]initWithNibName:@"ModelleController" bundle:nil];
   modelleController.title = [[markenArray objectAtIndex:indexPath.row]objectForKey:TITEL];          //TITEL  ist hier die Automarke (Audi, BMW etc)
   modelleController.detailModelleArray = [[NSArray alloc] initWithArray:modelleArray];                       
   
   [self.navigationController pushViewController:modelleController animated:YES];
   [modelleController release];

}

Nun suche ich eben eine "Standardisierung" wie ich zum Schluss Bilder und Text einfügen kann in eine Subklasse von UIViewController.

Ich hoffe es ist verständlich beschrieben
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Ich würde die plist wie folgt aufbauen:

Code:
<array>
	<dict>
		<key>name</key>
		<string>Audi</string>
		<key>models</key>
		<array>
			<dict>
				<key>name</key>
				<string>A1</string>
				<key>picture</key>
				<string>{URL_to_picture}</string>
				<key>description</key>
				<string>Der A1 ist blablabla...</string>
			</dict>
			<dict>
				<key>name</key>
				<string>A3</string>
				<key>picture</key>
				<string>{URL_to_picture}</string>
				<key>description</key>
				<string>Der A3 ist blablabla...</string>
			</dict>
			<dict>
				<key>name</key>
				<string>A4</string>
				<key>picture</key>
				<string>{URL_to_picture}</string>
				<key>description</key>
				<string>Der A4 ist blablabla...</string>
			</dict>
			<dict>
				<key>name</key>
				<string>A8</string>
				<key>picture</key>
				<string>{URL_to_picture}</string>
				<key>description</key>
				<string>Der A8 ist blablabla...</string>
			</dict>
			// und so weiter...
		</array>
	</dict>
	<dict>
		<key>name</key>
		<string>Mercedes</string>
		<key>models</key>
		<array>
			<dict>
				<key>name</key>
				<string>A-Klasse</string>
				<key>picture</key>
				<string>{URL_to_picture}</string>
				<key>description</key>
				<string>Der A-Klasse ist blablabla...</string>
			</dict>
			<dict>
				<key>name</key>
				<string>C-Klasse</string>
				<key>picture</key>
				<string>{URL_to_picture}</string>
				<key>description</key>
				<string>Der CL ist blablabla...</string>
			</dict>
			// und so weiter...
		</array>
	</dict>
	// und so weiter...
</array>

dann hast du die Modelle gleich in einem Array und musst nicht Umwege machen. Die URL zu den Bildern können Pfade in den Resources deiner App sein, oder auch URLs, welche du dann ladest. So ist alles schön zusammen in einer plist.

Gruss ppocket
 

Miralem23

Kaiser Wilhelm
Registriert
24.11.08
Beiträge
178
wie greife ich nun auf die Daten zu??

mit cell.textLabel.text = [[autoArray objectAtIndex:indexPath.row]objectForKey:NAME]; bekomme ich nur die Herstellernamen (Audi, Mercedes)

Wie aber greife ich nun auf das Array mit den Automodellen zu und wie schreibe ich das in meine Zelle.

cell.detailTextLabel.text = ....


Quasi: Wie erhalte ich das Array im Array?
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
So:

Code:
NSDictionary *modellDaten = [(NSArray *)[(NSDictionary *)[meinMarkenArray objectAtIndex:markenIndex] objectForKey:@"models"] objectAtIndex:modellIndex];
cell.detailTextLabel.text = [modellDaten objectForKey:@"name"];

Du gehst sozusagen in der Objective-C Struktur deiner plist auf einem gewissen von dir vorgegebenen Pfad in die Verschachtelung und holst dir so die Werte, die du brauchst.

Dein Pfad ist hier:

brands[markenIndex] -> models[modellIndex] -> name

Gruss ppocket
 

Mole23

Grahams Jubiläumsapfel
Registriert
05.07.10
Beiträge
104
Hat sich erledigt mit dem verherigen Post...
 

Miralem23

Kaiser Wilhelm
Registriert
24.11.08
Beiträge
178
OK ich hab das nun so gemacht

in der Plist befindet sich nicht viel ein Autohersteller: Audi und dessen zwei Modelle A1, und A2

NSDictionary *modellDaten = [(NSArray *)[(NSDictionary *)[autoArray objectAtIndex:indexPath.row] objectForKey:MODELS] objectAtIndex:indexPath.row];

cell.textLabel.text = [[autoArray objectAtIndex:indexPath.row]objectForKey:NAME];
cell.detailTextLabel.text = [modellDaten objectForKey:MODELLNAME];

Nur holt er mir hiermit nur das erste Objekt mit dem key: MODELLNAME nämlich A1 für Audi
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Ist ja auch logisch, er macht genau das, was du ihm sagst. Das Objekt an Stelle 'indexPath.row' gibt dir logischerweise immer nur EIN Objekt zurück.

Gruss ppocket