Finde den Fehler nicht

  • Finde den Fehler nicht

    Hallo,
    ich sitze jetzt schon länger an einem Problem und finde den logischen Fehler einfach nicht. Vielleicht findet ihn einer von euch.
    In meinem Code wird jeder Kugel ein Zahlenwert zwischen 1 und 11 zugeordnet, wobei jede Zahl für ein bestimmtes Bild steht. Wenn ich die Werte überprüfe, dann stimmt der Zahlenwert nicht mit dem Bild überein, z.B.: Zahl = 1 aber Bild = 5.
    Komischerweise tritt der Fehler nie bei Kugel 17 und 18 auf.
    Vielen Dank im voraus.


    Quellcode

    1. for (int i = 1; i < 100; i++){
    2. kugelIndex[i] = (arc4random() % 11) + 1;
    3. if (kugelIndex[i] == 1) {
    4. kugelFarbe[i] = @"k1.gif";
    5. }
    6. if (kugelIndex[i] == 2) {
    7. kugelFarbe[i] = @"k2.gif";
    8. }
    9. if (kugelIndex[i] == 3) {
    10. kugelFarbe[i] = @"k3.gif";
    11. }
    12. if (kugelIndex[i] == 4) {
    13. kugelFarbe[i] = @"k4.gif";
    14. }
    15. if (kugelIndex[i] == 5) {
    16. kugelFarbe[i] = @"k5.gif";
    17. }
    18. if (kugelIndex[i] == 6) {
    19. kugelFarbe[i] = @"k6.gif";
    20. }
    21. if (kugelIndex[i] == 7) {
    22. kugelFarbe[i] = @"k7.gif";
    23. }
    24. if (kugelIndex[i] == 8) {
    25. kugelFarbe[i] = @"k8.gif";
    26. }
    27. if (kugelIndex[i] == 9) {
    28. kugelFarbe[i] = @"k9.gif";
    29. }
    30. if (kugelIndex[i] == 10) {
    31. kugelFarbe[i] = @"k10.gif";
    32. }
    33. if (kugelIndex[i] == 11) {
    34. kugelFarbe[i] = @"k11.gif";
    35. }
    36. }
    37. NSLog(@"%d" ,kugelIndex[11]);
    38. NSLog(@"%d" ,kugelIndex[12]);
    39. NSLog(@"%d" ,kugelIndex[13]);
    40. NSLog(@"%d" ,kugelIndex[14]);
    41. NSLog(@"%d" ,kugelIndex[15]);
    42. NSLog(@"%d" ,kugelIndex[16]);
    43. NSLog(@"%d" ,kugelIndex[17]);
    44. NSLog(@"%d" ,kugelIndex[18]);
    45. [kugel11 setBackgroundImage:[UIImage imageNamed:kugelFarbe[11]] forState:UIControlStateNormal];
    46. [kugel12 setBackgroundImage:[UIImage imageNamed:kugelFarbe[12]] forState:UIControlStateNormal];
    47. [kugel13 setBackgroundImage:[UIImage imageNamed:kugelFarbe[13]] forState:UIControlStateNormal];
    48. [kugel14 setBackgroundImage:[UIImage imageNamed:kugelFarbe[14]] forState:UIControlStateNormal];
    49. [kugel15 setBackgroundImage:[UIImage imageNamed:kugelFarbe[15]] forState:UIControlStateNormal];
    50. [kugel16 setBackgroundImage:[UIImage imageNamed:kugelFarbe[16]] forState:UIControlStateNormal];
    51. [kugel17 setBackgroundImage:[UIImage imageNamed:kugelFarbe[17]] forState:UIControlStateNormal];
    52. [kugel18 setBackgroundImage:[UIImage imageNamed:kugelFarbe[18]] forState:UIControlStateNormal];
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Haekki ()

  • zerm schrieb:


    Ist doch logisch! In Deinem Code geht es ja auch nur bis 11!!

    Bei der Ausgabe der Kugeln ja, das ist eben eine Untermenge der gefüllten 100. Aber trotzdem sollen bei jeder Kugel Index und Farbe übereinstimmen, oder?

    Mich würde einmal interessieren, die die beiden Vektoren definiert sind... Es mag an meiner Unkenntnis liegen, aber ich hätte NSStrings immer in einem NS(Mutable)Array gespeichert. Warum nicht einmal mit einem NSLog direkt in der Schleife Index und Text ausgeben (zugegeben, ich bin ein Log-Junkie beim Debuggen).

    Mattes

    Edit: sorry, wohl noch zu früh: ich wollte sagen, nur bei der Auswahl der Kugel werden welche ausserhalb von 1-11 genommen, was ja auch okay ist wenn 100 initialisiert wurden...
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()

  • So ?

    Quellcode

    1. for (int i = 1; i < 100; i++)
    2. {
    3. kugelIndex[i] = (arc4random() % 18) + 1;
    4. kugelFarbe[i] = [NSString stringWithFormat:@"k%i.gif", kugelIndex[i]];
    5. NSLog(@"K-Farbe = %@ K-Index = %i, S-Index = %i", kugelFarbe[i], kugelIndex[i], i);
    6. }
  • Der Code so wie er da steht ist unschön, sollte aber funktionieren. Was in dem Code nicht zu erkennen ist ist, wie Du herausfindest das Nummer und Bild nicht überein stimmen. Dieser Teil des Codes fehlt. Eventuell sind auch die Kugel Objekte falsch oder gar die Array intialisierung.

    Zusammenfassend: An dem was da steht ist alles richtig, der Fehler muss also in einem Teil Deines Codes liegen den Du nicht gepostet hast.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Erst einmal vielen Dank an alle für die Hilfe.
    Ich habe in der Zwischenzeit auch noch einmal über NSLog den "Pfad" des Bildes kontrolliert. Er stimmt mit der Zahl überein.
    Zahl = 1 Bild = k1.gif
    ...
    Zahl = 11 Bild = k11.gif

    Allerdings ist es wohl anscheinend so, dass bestimmte Buttons nicht ihr Bild ändern, egal welchen Wert sie haben. Sie starten z.B. mit der Farbe grün (wurde so im IB festgelegt) und wenn sie dann einen Zahlenwert erhalten, ändert sich das Bild nicht. Ich habe im IB alle Verknüpfungen gelöscht, neu angelegt, clear durchgeführt, aber es hat nicht geholfen.

    Am Besten ich fange von vorne an ...
  • Du weißt aber schon, dass die Button erst ihre Farbe (Bild) ändern, wenn das System zurück in der Runloop ist, oder ?

    Also wenn du in einer Schleife die Farben änderst, dann passiert da erstmal gar nichts.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

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

    ramo schrieb:

    So ?

    Quellcode

    1. for (int i = 1; i < 100; i++)
    2. {
    3. kugelIndex[i] = (arc4random() % 18) + 1;
    4. kugelFarbe[i] = [NSString stringWithFormat:@"k%i.gif", kugelIndex[i]];
    5. NSLog(@"K-Farbe = %@ K-Index = %i, S-Index = %i", kugelFarbe[i], kugelIndex[i], i);
    6. }

    Der Code erzeugt aber ein Array von Dangling Pointern.

    Michael



    Hallo Michael,

    danke für die Info, kannst du mir das bitte genauer erklären ?
  • Da du die Strings nicht allozierst, ist das array nur solange valid wie die Methode nicht verlassen wird. Danach wären das kugelFarbe array mit lauter ungültigen (dangling) pointern befüllt. Da NStrings ein Besonderheit darstellen würde das hier nicht aufallen. Würdest Du aber z.B. ein anderes NSObject nehmen würde dieser Code crashen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

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

    Da du die Strings nicht allozierst, ist das array nur solange valid wie die Methode nicht verlassen wird. Danach wären das kugelFarbe array mit lauter ungültigen (dangling) pointern befüllt. Da NStrings ein Besonderheit darstellen würde das hier nicht aufallen. Würdest Du aber z.B. ein anderes NSObject nehmen würde dieser Code crashen.

    Gruß

    Claus


    diese strings würden dealloziert! sowas wie @"k1.gif" aber nicht.
  • Hallo noch einmal,
    ich habe jetzt die Lösung gefunden und eigentlich ist es schon zu peinlich das zu posten.

    Bei den Buttons, die ihr Bild nicht ändern, hatte ich das Startbild im IB unter "Image" und nicht "Background" eingestellt ...

    Sorry :rolleyes:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Haekki ()