NSMutableArray

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

  • NSMutableArray

    Hallo,
    ich würde gerne mehrere strings in einem array speichern und dann alle gemeinsam verändern...
    quasi so:
    string1, string2 und string3 werden in das array gesteckt...
    nachher will ich dann einfach sagen array = @"hello", so dass dann string1 bis string3 alle 'hello' anzeigen...
    geht das, weil beim meinem versuch bin ich immer gescheitert?

    Quellcode

    1. labelArray = [[NSMutableArray alloc] initWithCapacity:[labelArray count]];
    2. [labelArray addObject:string1];
    3. [labelArray addObject:string2];
    4. [labelArray addObject:string3];
    5. for (int i = 0; i < [labelArray count] ; i++) {
    6. [labelArray objectAtIndex:i] = @"hello"; // :( hier ist der fehler glaub ich...
    7. }



    vielen dank!
  • Kleicker schrieb:

    Quellcode

    1. labelArray = [[NSMutableArray alloc] initWithCapacity:[labelArray count]];
    2. [labelArray addObject:string1];
    3. [labelArray addObject:string2];
    4. [labelArray addObject:string3];
    5. for (int i = 0; i < [labelArray count] ; i++) {
    6. [labelArray objectAtIndex:i] = @"hello"; // :( hier ist der fehler glaub ich...
    7. }

    Du vermutest den Fehler an der richtigen Stelle. Überlege mal, was da in Zeile 8 passiert. objectAtIndex: gibt Dir ein Objekt zurück, ein String in Deinem Fall. Das führt dann ja auf einen Ausdruck nach dem Schema:

    Quellcode

    1. @"ein String" = @"ein anderer String";
    Ergibt diese Codezeile einen Sinn? Wohl kaum.

    NSMutableArray bietet einige Methoden an, um Objekte zu ersetzen. -> Klick.
    Von NSArray erbt NSMutableArray dann auch noch Methoden, um allen Objekten Nachrichten zu schicken. -> Klick.
    Mit diesen Möglichkeiten kannst Du das erreichen, was Du vor hast.

    Michael
  • hey danke,
    aber ich will ja nicht ein objekt im array ersetzen, sondern den inhalt vom string string...
    oder verstehe ich das gerade nur nicht ganz!?
    kannst du mir vllt. ein kleines codebeispiel geben?

    danke
  • Naja man kann zwar den NSString nicht ändern, aber in Seinem Fall will er das glaube ich auch gar nicht. Er will den String im Array ersetzen. Das geht natürlich indem er den alten entfernt und den neuen reinsetzt

    Quellcode

    1. NSString *neu=[NSString strintWithString:@"Hello"];
    2. [labelArray insertObject:neu at Index:i]
    3. [labelArray removeObjectAtIndex:i]


    (Kann sein das die Methoden etwas anders heissen. Habe das gerade aus dem Kopf geschrieben)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Naja man kann zwar den NSString nicht ändern, aber in Seinem Fall will er das glaube ich auch gar nicht. Er will den String im Array ersetzen. Das geht natürlich indem er den alten entfernt und den neuen reinsetzt

    Quellcode

    1. NSString *neu=[NSString strintWithString:@"Hello"];
    2. [labelArray insertObject:neu at Index:i]
    3. [labelArray removeObjectAtIndex:i]


    (Kann sein das die Methoden etwas anders heissen. Habe das gerade aus dem Kopf geschrieben)

    Gruß

    Claus

    Dann aber schon -replaceObjectAtIndex:withObject: (NSMutableArray)

    Aber ich glaube auch, dass sich der OP einmal klar werden muss, dass es einen Unterschied zwischen ID und Objekt gibt. Siehe hierzu Michaels ersten Beitrag.
    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"?
  • Quellcode

    1. labelArray = [NSMutableArray arrayWithObjects:@"A", @"B", @"C", nil];
    2. NSLog(@"ARRAY %@", [labelArray description]);
    3. for (int i = 0; i <= [labelArray count]-1; ++i)
    4. {
    5. [labelArray replaceObjectAtIndex:i withObject:@"NEU"];
    6. }
    7. NSLog(@"ARRAY %@", [labelArray description]);


    EDIT: Wieder mal zu langsam !
  • ok ich habe das jetzt so was verändert und habe damit immernoch ein problen...
    also jetzt will ich mehrere label im array speichern und dann alle label.text auf @"Hallo" stezen


    Quellcode

    1. labelArray = [[NSMutableArray alloc] initWithCapacity:[labelArray count]];
    2. [labelArray addObject:label1];
    3. [labelArray addObject:label2];
    4. [labelArray addObject:label3];
    5. for (int i = 0; i < [labelArray count] ; i++) {
    6. [labelArray objectAtIndex:i].text = @"Hallo"; //das ist hier ja wieder das selbe problem...
    7. }



    kann mir jemand den gefixten code schicken?

    vielen dank!
  • ja schon, das problem ist, dass man anscheinend nicht sagen kann:

    [labelArray objectAtIndex:i].text = @"Hallo";

    ich glaube das problem liegt bei '[labelArray objectAtIndex:i].text'...
    obwihl ganz verstehen tue ich das nicht, da das array ja nur das label lädt und dann eigentlich .text anhängen können müsste....
  • Kleicker schrieb:

    Quellcode

    1. labelArray = [[NSMutableArray alloc] initWithCapacity:[labelArray count]];
    2. [labelArray addObject:label1];
    3. [labelArray addObject:label2];
    4. [labelArray addObject:label3];
    5. for (int i = 0; i < [labelArray count] ; i++) {
    6. [labelArray objectAtIndex:i].text = @"Hallo"; //das ist hier ja wieder das selbe problem...
    7. }
    Du initialisierst ein NSMutableArray mit dessen eigener Kapazität. Da kannst du auch gleich 0 nehmen bzw. besser 3, da du ja 3 Label hinzufügst.
    Ich würde lieber die Labeltexte hinzufügen, als die Label als Objekte. Sonst müsstest du wahrscheinlich casten:

    Quellcode

    1. labelArray = [[NSMutableArray alloc] initWithCapacity:3];
    2. [labelArray addObject:label1];
    3. [labelArray addObject:label2];
    4. [labelArray addObject:label3];
    5. for (int i = 0; i < [labelArray count] ; i++) {
    6. (UILabel *)[labelArray objectAtIndex:i].text = @"Hallo";
    7. }