[Anfänferfrage] verschiedene Objekte in For-Schleife aufrufen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Anfänferfrage] verschiedene Objekte in For-Schleife aufrufen

    Hi,

    hab früher viel mit php programmiert und wälze mich seit zwei Wochen durch "Objective-C und Coco - Praxiseinsteig".
    Habe folgende Frage.

    Angenommen ich habe n Objekte initiiert:

    Objekt1
    Objekt2
    Objekt3
    ...

    Diese möchte ich in ein NSMutableArray schreiben und zwar (zur Übung) mit Hilfe einer for-Schleife:

    Quellcode

    1. for(int i = 1; i<n+1;i++)
    2. {
    3. //Eintrag in das Array
    4. [unserArray addObject:ObjectI];
    5. }


    Wie kann ich diese Methode so formulieren, dass der Compiler bei jedem Schleifendurchlauf einen anderen Objektnamen (nämlich das aktuelle Objekti) hinzufügt. Stehe grad was aufm schlauch.
    Hoffe ich bin in diesem Forum richtig.

    Gruß
    poze
  • Naja ich möchte dies hier durch eine for-Schleife verkürzen:

    Quellcode

    1. [unserArray addObject:Objekt1];
    2. [unserArray addObject:Objekt2];
    3. [unserArray addObject:Objekt3];
    4. [unserArray addObject:Objekt4];
    5. [unserArray addObject:Objekt5];
    6. ....
    7. [unserArray addObject:Objekt1286];
  • Geht nicht gibt's nicht.

    Und nein so wie Du Dir das vorstellst geht das nicht. Ergibt auch keinen Sinn. Du denkst da gerade was vollkommen verkehrtes was immer das auch ist.

    Für mehr Hilfe brauchen wir mehr Informationen
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • 1. Wenn das $anderswo geschieht, dann packst du sie in ein Dictionary.
    2. Du gibst den Objekten eine Eigenschaft name.
    3. Nein, gewiss gibt es keine andere Möglichkeit, da das Namen von Objekt-IDs sind, nicht von Objekten. Es gibt in Objective-C genau gar keine Möglichkeit, ein Objekt zu benennen.
    4. Lies ein Buch, welches hinreichend über den Unterschied zwischen Zeigern und verzeigerten Objekt aufklärt.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Naja was soll ich da noch groß an Infos noch hinzufügen. Sagen wir es sind Objekte einer Klasse "Person" die ein paar properties ("name", "firstname", "age") hat.
    Jetzt erzeuge ich 10 Personen mit irgendwelchen Namen und Altern. Und anstatt nach jeder Initialisierung per "addObject" das Objekt ans Ende des Arrays zu schicken, würde ich das gern in einer Schleife machen, die die 10 Personen abarbeitet.
    Wenn das nicht geht, gehts halt nicht =) Dafür mache ich mir ja Gedanken darüber um herauszufinden was möglich ist und was nicht bzw. wie man es anders lösen muss.
  • Macht dir ja auch keiner einen Vorwurf. Du solltest aber zunächst zwei Dinge wirklich für dich herausfinden:

    1. Bezeichner von Variablen (Variablennamen) sind zur Laufzeit nicht vorhanden, weil Objective-C kompiliert wird.
    2. Du hast überhaupt nur Zeigervariablen. Also würdest du allenfalls Namen von Zeigern erhalten. Niemals aber Namen von Objekten. Die gibt es nicht einmal vor dem Kompilieren.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ja, so sähe es aus, wenn ich die Personen nur "person 1", "person 3" usw. nenne. Mit "Max", "Peter", "Anna", etc. wirds schwierig.
    Ich könnte ja den Personen noch eine ID zuweisen, mit derer Hilfe nach einer Prüfung i = ID jedes Objekt hinzufügt. Aber das ist dann auch wieder zu umständlich.

    Aber danke an euch ;)
  • Du könntest arrayWithObjects: verwenden

    Code wie dieser

    Quellcode

    1. NSMutableArray * unserArray = [[NSMutableArray alloc] init];
    2. Person * person1=[[Person alloc] initWith...];
    3. [unserArray addObject:person1];
    4. ...
    5. Person * personN=[[Person alloc] initWith...];
    6. [unserArray addObject:personN];


    Ginge auch ein

    Quellcode

    1. // XCode 4.5
    2. unserArray = @[[[Person alloc] initWith...], ..., [[Person alloc] initWith...]];
    3. /// bzw. mit älteren Xcode Versionen
    4. unserArray = [[NSArray alloc] initWithObjects:[[Person alloc] initWith...], ..., [[Person alloc] initWith...], nil];


    Willst Du die Personen nicht über den Index identifizieren, dann kannst Du auch ein NS(Mutable)Dictionary verwenden und so über z.B. einen String auf die Person zugreifen.
  • die frage ist ja eher warum du instanzen einer klasse beim variablennamen kennen willst? also zb max, ralf und lisa. normal werden solche user ja dynamisch angelegt (meist vom user der app) und somit kennst du sie nicht schon zur kopilierzeit.
    Man verwendet ja auch in php das feature allerseltenst auf variablen über deren variablennamen in einem string zuzugreifen.
  • pozelei schrieb:

    Ja, so sähe es aus, wenn ich die Personen nur "person 1", "person 3" usw. nenne. Mit "Max", "Peter", "Anna", etc. wirds schwierig.
    Ich könnte ja den Personen noch eine ID zuweisen, mit derer Hilfe nach einer Prüfung i = ID jedes Objekt hinzufügt. Aber das ist dann auch wieder zu umständlich.

    Aber danke an euch ;)

    Wieso gibst du nicht den Personen eine Eigenschaft name?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • matz schrieb:

    Ich denk eher er meint sowas:

    Quellcode

    1. User * Max = [[User alloc] init];
    2. User * Peter = [[User alloc] init];
    3. User * Anna = [[User alloc] init];


    Warum weiß ich zwar nicht ...

    Na, ja, eben, er versucht es "in falschem Stil" anzugehen, um dann sich zu wundern, dass das eine Sackgasse ist. Ich hatte ihm ja schon vorgeschlagen:

    Quellcode

    1. NSDictionary *people = @{
    2. @"Max" : [[User alloc] init],
    3. @"Peter" : [[User alloc] init],
    4. @"Anna" : [[User alloc] init] };
    5. User *user = people[@"Anna"];

    Oder

    Quellcode

    1. User *user = [[User alloc init];
    2. user.name = @"Max";
    3. User *user = [[User alloc init];
    4. user.name = @"Peter";
    5. User *user = [[User alloc init];
    6. user.name = @"Anna";
    7. NSArray *annaUsers = [people filteredArrayUsingPredicate:[NSPredicate predicateWithString:@"name = %@", @"Anna"]];


    (Typed in Safari)
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?