int inkrementieren

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

  • int inkrementieren

    Moin,

    hat jemand eine Ahnung, warum int row nicht inkrementiert wird?

    Quellcode

    1. - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    2. NSMutableDictionary *myValue = [[NSMutableDictionary alloc]init];
    3. int row=0;
    4. if ([sort_arr count]) {
    5. NSLog(@"%d", row);
    6. NSLog(@"%@",[sort_arr objectAtIndex:section]);
    7. myValue = [sort_arr objectAtIndex:row];
    8. NSString *status_auswahl = [myValue objectForKey:@"orders_status"];
    9. switch ([status_auswahl intValue]) {
    10. case 1: return @"Offen"; break;
    11. case 2: return @"In Bearbeitung"; break;
    12. case 3: return @"Versendet"; break;
    13. case 4: return @"Zahlung per Paypal erhalten"; break;
    14. case 5: return @"Nicht bezahlt / Warten auf Daten"; break;
    15. case 6: return @"Bezahlt / Warten auf Daten"; break;
    16. case 7: return @"Korrekturabzug versendet"; break;
    17. case 8: return @"Nicht bezahlt / Daten eingeg."; break;
    18. case 9: return @"Bezahlt / Daten eingeg."; break;
    19. case 10: return @"Ware zur Abholung bereit"; break;
    20. case 11: return @"PayPal Abbruch"; break;
    21. case 12: return @"Offen PP bezahlt"; break;
    22. case 13: return @"Offen PP wartend"; break;
    23. case 14: return @"PayPal abgelehnt"; break;
    24. case 15: return @"Bezahlung schwebend"; break;
    25. case 16: return @"Bezahlung erfolgt"; break;
    26. case 17: return @"Bezahlung storniert"; break;
    27. case 18: return @"Prüfung notwendig"; break;
    28. case 19: return @"Unbestätigt"; break;
    29. case 20: return @"Bestätigt"; break;
    30. case 21: return @"Bezahlt"; break;
    31. default: return @"unbekannt"; break;
    32. }
    33. row++;
    34. }
    35. return @"unbekannt";
    36. }
    Alles anzeigen
    Ich bin gegen Signaturen!!!
  • chartus schrieb:

    weil das keine schleife ist?

    vermutlich möchtest du was anderes haben aber wenn dann sollte row schon static sein... aber dann benötigst du auch wieder eine rücksetz logik


    static int row = 0; außerhalb der methode hab ich auch probiert. geht auch nicht.

    Warum muss es eine Schleife sein? Die Inkrementierung erfolgt ausserhalb des if aber innerhalb titleForHeaderInSection, welches ja nach section.count durchlaufen wird. An der row ändert sich aber rein gar nichts.
    Ich bin gegen Signaturen!!!
  • also entweder du machst row zu einer instanzvariable oder du definierst es innerhalb der methode zu static

    scopregeln halt.

    so wie es da oben steht setzt jeder methodenaufruf row auf null dein if läuft durch und vorm return setzt du es auf +1 und das spiel beginnt von vorn...

    ich halte das auch für irgendwie seltsam das du auf diese art die zeilen durchzählen willst - klingt alles nen bischen krude


    btw: wozu du das leere dict erzeugst weiss ich auch nicht so recht...
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • Wenn ich das gerade richtig sehe, wird row nicht inkrementiert, da du mit deinem switch schon vorher die Methode verlässt. Entweder änderte du deine switch so dass die returns wegfallen und du stattdessen den Wert einem String zuweist, den du am Ende zurück gibst, oder du inkrementierst row schon vorher.
    Das Herz besitzt Gründe, die die Vernunft nicht kennt.
  • pierredrks schrieb:

    Wenn ich das gerade richtig sehe, wird row nicht inkrementiert, da du mit deinem switch schon vorher die Methode verlässt. Entweder änderte du deine switch so dass die returns wegfallen und du stattdessen den Wert einem String zuweist, den du am Ende zurück gibst, oder du inkrementierst row schon vorher.


    Das switch wird nicht betreten. Ich hab hab schon geschaut mit dem debugger ;)
    Ich bin gegen Signaturen!!!
  • chartus schrieb:

    also entweder du machst row zu einer instanzvariable oder du definierst es innerhalb der methode zu static

    scopregeln halt.

    so wie es da oben steht setzt jeder methodenaufruf row auf null dein if läuft durch und vorm return setzt du es auf +1 und das spiel beginnt von vorn...

    ich halte das auch für irgendwie seltsam das du auf diese art die zeilen durchzählen willst - klingt alles nen bischen krude


    btw: wozu du das leere dict erzeugst weiss ich auch nicht so recht...


    Ich wüsste nicht, wie ich sonst dynamisch die sections erzeugen soll. ich hatte das problem vor einger zeit hier im forum schon und dachte, es würde passen, aber es geht doch nicht so, wie ich dachte.

    Das Dic brauch ich doch für das myValue innerhalb des if.
    Ich bin gegen Signaturen!!!
  • beage schrieb:

    chartus schrieb:

    also entweder du machst row zu einer instanzvariable oder du definierst es innerhalb der methode zu static

    scopregeln halt.

    so wie es da oben steht setzt jeder methodenaufruf row auf null dein if läuft durch und vorm return setzt du es auf +1 und das spiel beginnt von vorn...

    ich halte das auch für irgendwie seltsam das du auf diese art die zeilen durchzählen willst - klingt alles nen bischen krude


    btw: wozu du das leere dict erzeugst weiss ich auch nicht so recht...


    Ich wüsste nicht, wie ich sonst dynamisch die sections erzeugen soll. ich hatte das problem vor einger zeit hier im forum schon und dachte, es würde passen, aber es geht doch nicht so, wie ich dachte.

    Das Dic brauch ich doch für das myValue innerhalb des if.


    Ich seh gerade, so geht das nicht. Ich würde ja für jede row eine Section erzeugen. Ach Shit!!!
    Ich bin gegen Signaturen!!!
  • Ich sehe das wie beage.

    Wenn das if betreten wird, dann kommst du auch in das switch.
    Da du im switch ein default: hast, wird wenn sonst nichts stimmt, das default angefahren und da hast du ein return:

    Bau doch als test mal deine switches um:
    aus
    default: return @"unbekannt"; break;
    machst du ein default: nslog(@"switch default"); return @"unbekannt"; break;
    Viele Probleme lassen sich lösen, wenn man sich damit beschäftigt
  • RogerSt schrieb:

    Ich sehe das wie beage.

    Wenn das if betreten wird, dann kommst du auch in das switch.
    Da du im switch ein default: hast, wird wenn sonst nichts stimmt, das default angefahren und da hast du ein return:

    Bau doch als test mal deine switches um:
    aus
    default: return @"unbekannt"; break;
    machst du ein default: nslog(@"switch default"); return @"unbekannt"; break;


    Ich muss es anders machen, siehe meinen letzten Post.
    Ich bin gegen Signaturen!!!
  • Du legst dir da gerade sowas von die Karten mit deinem Datenmodell, das habe ich Dir vorher Prophezeit. Wenn du ein MacMoonShine bist, dann kannst du mit solchen komplexen Dict/Array Verschachtelungen arbeiten, aber als Anfänger bekommst du da nur ein Problem nach dem anderen. Hättest du mal am Anfang auf mich gehört und alles in ein schönes Modell gepackt. Dann wäre Dir jetzt auch alles viel klarer was du da eigentlich tust.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Hallo,

    ich kann da Claus nur zustimmen, ohne eine Ahnung zu haben was ihr vorher schon besprochen habt.
    Das Zeugs schreit aber förmlich nach einem gescheiten Controller/Modell.

    Zumal Du hier vermutlich in Deinem ViewControllerDingens schon Datenlogik implementierst.
    Das sollte für Dich ein Indiz für "mach es anders und besser" sein.

    Viele Grüße
  • Ja, irgendwie sieht das wirr aus.

    titleForHeaderInSection: sagt Dir ja schon, um welche Section es geht. Da kannst Du dann den ganzen Switchkrams lassen und irgendwas nehmen wie

    C-Quellcode

    1. return [headerTitleArray objectAtIndex:section];


    In der numberForSections: musst Du herausfinden, wie viele Sections überhaupt gezeigt werden müssen. Dazu reicht Dir vermutlich die Anzahl der Status aus deinem Modell.
    (Pro-Tipp: nicht vergebene Status einfach nicht in den Sections auftauchen lassen. Bedarf nur eine gewisse Anpassung in der headerTitleArray. Keine tief greifende Datenlogik in den ViewController!)

    Schlussendlich bekommst Du die numberOfRowsInSection: über die Anzahl der Einträge des jeweiligen der Section zugeordneten Status heraus und kannst bei viewForRow:atIndex: dann auf die Objektreferenzen eben jenes Status zugreifen.
    Natürlich muss das Modell dann mit Hin- und Rückbeziehungen stimmig sein.

    [Claus]
    Hinterher gibt es immer einen, der es vorher gewusst. :P
    Zeigefinger heben und 'Du hast es falsch gemacht' sagen ist ungefähr so hilfreich wie ein Pflaster bei einem Muskelfaserriss.
    Hilfreich sind Tipps. Alles Andere wirkt wie gehaltloses Kluggescheiße.
    [Blockierte Grafik: http://cdn.memegenerator.net/instances/250x250/29848235.jpg]
    «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
  • Marco Feltmann schrieb:


    [Claus]
    Hinterher gibt es immer einen, der es vorher gewusst. :P
    Zeigefinger heben und 'Du hast es falsch gemacht' sagen ist ungefähr so hilfreich wie ein Pflaster bei einem Muskelfaserriss.
    Hilfreich sind Tipps. Alles Andere wirkt wie gehaltloses Kluggescheiße.


    @Marco

    ich gehe mal davon aus das du den entsprechenden Thread mit den Celltypes nicht verfolgt hast um den es geht. Dort war meine erste Antwort auf seine frage wie er die JSON Daten intern bearbeiten soll, dass er sich ein vernünftiges Datenmodell mit Hilfe von Klassen erzeugen soll. Er hat sich dann aber doch entschieden einfach mit den vom JSON Parser erzeugten Dicts zu arbeiten und diese nur zu sortieren, was dann wieder Arrays of Dicts erzeugt etc. Ich habe also damals schon einen Vorschlag gemacht wie er es machen könnte um sich das Leben zu erleichtern.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

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

    Ja, irgendwie sieht das wirr aus.

    titleForHeaderInSection: sagt Dir ja schon, um welche Section es geht. Da kannst Du dann den ganzen Switchkrams lassen und irgendwas nehmen wie

    C-Quellcode

    1. return [headerTitleArray objectAtIndex:section];


    In der numberForSections: musst Du herausfinden, wie viele Sections überhaupt gezeigt werden müssen. Dazu reicht Dir vermutlich die Anzahl der Status aus deinem Modell.
    (Pro-Tipp: nicht vergebene Status einfach nicht in den Sections auftauchen lassen. Bedarf nur eine gewisse Anpassung in der headerTitleArray. Keine tief greifende Datenlogik in den ViewController!)

    Schlussendlich bekommst Du die numberOfRowsInSection: über die Anzahl der Einträge des jeweiligen der Section zugeordneten Status heraus und kannst bei viewForRow:atIndex: dann auf die Objektreferenzen eben jenes Status zugreifen.
    Natürlich muss das Modell dann mit Hin- und Rückbeziehungen stimmig sein.

    [Claus]
    Hinterher gibt es immer einen, der es vorher gewusst. :P
    Zeigefinger heben und 'Du hast es falsch gemacht' sagen ist ungefähr so hilfreich wie ein Pflaster bei einem Muskelfaserriss.
    Hilfreich sind Tipps. Alles Andere wirkt wie gehaltloses Kluggescheiße.
    [Blockierte Grafik: http://cdn.memegenerator.net/instances/250x250/29848235.jpg]


    Hallo Marco,

    es geht ja tatsächlich nur um die Sections. alles Andere passt ja. Die Anzahl bnötigter Sections ist bekannt, die wird berechnet. Das Problem ist, dass solange nur ein Eintrag pro Section vorhanden ist, alles funktioniert. Sobald es 2 Datensätze gibt, die den gieichen Status (Section) haben, werden alle Sections gleich benannt. Ich schau mir das nochmal an.
    Ich bin gegen Signaturen!!!
  • beage schrieb:


    Das Dic brauch ich doch für das myValue innerhalb des if.


    Nur der Vollständigkeit halber:

    das:

    Quellcode

    1. NSMutableDictionary *myValue = [[NSMutableDictionary alloc]init];

    ist unnütz weil du hier ein neues leeres Dict erzeugst welches du hier:

    Quellcode

    1. myValue = [sort_arr objectAtIndex:row];

    ersatzlos überschreibst.

    einfacher (und resourcen schonender) wäre gleich ein:

    Quellcode

    1. NSMutableDictionary *myValue = [sort_arr objectAtIndex:row];

    oder ein:

    Quellcode

    1. NSString *status_auswahl = [[sort_arr objectAtIndex:row] objectForKey:@"orders_status"];


    SCNR :D
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • Nur der Vollständigkeit halber:



    oder ein:

    Quellcode

    1. NSString *status_auswahl = [[sort_arr objectAtIndex:row] objectForKey:@"orders_status"];


    Ist für mich aber auch schon wie Lotto spielen ;)

    - "sort_arr" ist scheinbar eine iVar, ohne Zugriff via Getter
    - -objectAtIndex:, keine Prüfung ob das Ding überhaupt so viele Dinger drin hat
    - -objectForKey: impliziert, dass im "sort_arr" ein DictionaryTeilo drin war/ist
    - "status_auswahl" wird als String deklariert, obwohl der Wert dafür etwas anderes sein kann

    Ich würde das lieber vernünftig in einen DatenController abbilden.

    Viele Grüße
  • beage schrieb:

    Hallo Marco,
    es geht ja tatsächlich nur um die Sections. alles Andere passt ja. Die Anzahl bnötigter Sections ist bekannt, die wird berechnet. Das Problem ist, dass solange nur ein Eintrag pro Section vorhanden ist, alles funktioniert. Sobald es 2 Datensätze gibt, die den gieichen Status (Section) haben, werden alle Sections gleich benannt. Ich schau mir das nochmal an.

    Und eben das dürfte niemals nicht passieren.
    Eine Section hat immer nur eine Nummer und dementsprechend auch immer nur einen Titel.
    Du wirst irgendwie auf Grund der Rows auf die Sections schließen. Das ist aber völlig fehl, da Du die Sektion ja bereits hast.
    «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
  • Ich hab jetzt das switch rausgeschmissen und hole mir die Daten der verschiedenen Stati auch vom Server per JSON.

    Die Methode habe ich jetzt so geschrieben und es funktioniert.

    Quellcode

    1. - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    2. return [[status_arr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"orders_status_id = %@", sections_arr[section]]][0] objectForKey:@"orders_status_name"];
    3. }
    Ich bin gegen Signaturen!!!