Wie kann ich zur Laufzeit n Objekte einer eigenen Klasse instantiieren und in ein Array geben?

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

  • Wie kann ich zur Laufzeit n Objekte einer eigenen Klasse instantiieren und in ein Array geben?

    Hallo Zusammen,

    ich habe eine eigene Klasse, von der ich gerne zur Laufzeit n Objekte (abhängig von der Anzahl an Objekten in einem anderen Array) instantiieren und in ein Array geben möchte.

    Die eigene Klasse heisst: RH_BetragZuTeilnehmer

    In einer FastEnumeration gehe ich also durch das Array 1 und instantiiere mit folgendem Code n Objekte meiner Klasse und gebe sie in ein Array. Das Array ist ein @property (nonatomic, strong), also "retained". Dennoch ist die Anzahl der Objekte = 0, wenn ich die Methode, in der die Instantiierung passiert, verlasse:

    for (NSString *teilnehmer in self.myReiseTeilnehmerArray) {
    [self.myBezahlerArray addObject:[[RH_BetragZuTeilnehmer alloc]initWithName:teilnehmer withBetrag:0.00]];
    }

    Der normale Weg:
    RH_BetragZuTeilnehmer aObject01 = [[RH_BetragZuTeilnehmer alloc] init];
    ... a Object02 ….
    … a Object03 ….

    und dann
    [myArray addobject: aObject02] funktioniert nicht, da ich eben keine festen Namen für die Objekte vergeben kann, da sie erst zur Laufzeit instantiiert werden sollen.

    Kann mir jemand sagen, wie das geht, oder einfach ein Schlagwort geben, das mir weiterhilft beim Googeln?

    Vielen Dank an alle, die helfen!
    LG
    Robert aus München
    Meine Signatur: Wir sehen die Welt nicht wie sie ist, sondern wie wir sind ! :huh:
  • Der Code sieht auf den ersten Blick korrekt aus.
    Ist dein 'Bezahler'-Array denn zu der Zeit bereits initialisiert?
    Wird es gegebenenfalls an anderer Stelle überschrieben?

    Es sieht (für mich hier oben in Hamburg) stark danach aus, als würde dein -addObject... an nil gehen und im Nirvana landen.
    Wenn mich nicht alles täuscht würde dann auch -count an nil als Resultat einfach nur 0 liefern.

    Am Besten hangelst du dich mal mit deinem Debugger durch die Schleife und schaust bei jedem Durchlauf kritisch auf das Array.
    Entweder es funktionierte nie, oder es wurde einfach zurückgesetzt.

    (Ein Immutable Array dürfte es ja nicht sein, weil du dann schlicht eine Exception bekommen würdest.)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • JUP, danke für die schnelle Hilfe. Das wars.
    Ich weiss zwar noch nicht warum, aber das Array an das ich die addObject-Methode schicke ist tatsächlich noch nicht initialisiert. Wenn ich das lokal in der Methode mache, funktioniert es.

    Bin trotzdem etwas verwirrt, weil ich das Array an anderer Stelle bereits initialisiert glaubte mit NSMutableArray *myBezahlerArray = [NSMuttableArray new];
    Bleibt ein Array denn dennoch "nil", wenn es nicht gleich Objekte bekommt ?

    Lg
    Robert
    Meine Signatur: Wir sehen die Welt nicht wie sie ist, sondern wie wir sind ! :huh:
  • LukeSideWalker schrieb:

    Bin trotzdem etwas verwirrt, weil ich das Array an anderer Stelle bereits initialisiert glaubte mit NSMutableArray *myBezahlerArray = [NSMuttableArray new];
    Bleibt ein Array denn dennoch "nil", wenn es nicht gleich Objekte bekommt?

    Natürlich nicht.

    Vergleiche:

    C-Quellcode

    1. // Deine Methode
    2. - (void) myMethod {
    3. NSMutableArray *myBezahlerArray = [NSMutableArray new];
    4. }
    5. // Direkter iVar Zugriff
    6. - (void) myMethod {
    7. myBezahlerArray = [NSMutableArray new];
    8. }
    9. // Setter!
    10. - (void) myMethod {
    11. self.myBezahlerArray = [NSMutableArray new];
    12. }
    13. // Der Vollständigkeit Halber: Setter 1.0
    14. - (void) myMethod {
    15. [self setMyBezahlerArray:[NSMutableArray new]];
    16. }
    Alles anzeigen

    Du hast unglücklicherweise eine lokale Variable in deiner Methode erstellt, die zufällig genau so hieß wie die Instanzvariable.

    Eine Alternative wäre auch noch ein angepasster Getter:

    C-Quellcode

    1. - (NSMutableArray*) myBezahlerArray {
    2. if(myBezahlerArray == nil) {
    3. myBezahlerArray = [NSMutableArray new];
    4. }
    5. return myBezahlerArray;
    6. }

    (Frag nicht, wie oft mich das schon am Arsch hatte... Und im Nachhinein weiß man gar nicht mehr warum.)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Lieber Lucas de Vil und macmoonshine,

    Ihr habt mir geholfen, vielen Dank. Habe den Thread deshalb auf "erledigt" gestellt.

    Lucas: Das mit der lokalen Variablen trifft nicht, ich habe nur schlampig den Code hier im Forum dargestellt. Das war natürlich "self.myBezahlerArray" und nicht "myBezahlerArray" und damit die iVar und nicht eine lokale Variable.

    Aber Eure Hinweise haben mir dennoch geholfen, an der richtigen Stelle zu suchen, ich dachte zunächst, es liegt an meiner eigenen Klasse. Aber die funktioniert. Ich glaube, es liegt daran, dass ich das besagte Array an anderer Stelle überschreibe ... so suche ich jetzt weiter.

    Vielen DANK. Ihr seid super und das um diese Zeit !!!!!!!!!
    :)
    Meine Signatur: Wir sehen die Welt nicht wie sie ist, sondern wie wir sind ! :huh:
  • LukeSideWalker schrieb:

    Ich glaube, es liegt daran, dass ich das besagte Array an anderer Stelle überschreibe ... so suche ich jetzt weiter.

    Eben das hat mich zu dem angepassten Setter veranlasst... +g+
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P