uitableview content überprüfen

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

  • uitableview content überprüfen

    Hallo Community,

    ich möchte den Content ein UITableView abprüfen, also ob da überhaupt etwas drin ist.
    Ich dachte ich mache es in der Methode: numberOfRowsInSection und frage den return Wert ab.

    falsch gedacht:

    Quellcode

    1. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    2. {
    3. // Return the number of rows in the section.
    4. NSArray *tempArray = [NSKeyedUnarchiver unarchiveObjectWithData:offlineData];
    5. return [tempArray count];
    6. if (tempArray == NULL) {
    7. UIAlertView *alertWhenNull = [[UIAlertView alloc] initWithTitle:@"Keine Nachrichten" message:@"Es sind keine Nachrichten in dieser Kategorie vorhanden." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    8. [alertWhenNull show];
    9. }
    10. }
    Alles anzeigen


    funktioniert nicht. Wo und wie frage ich es dann am besten ab?


    Gruß
    lernen, lernen, lernen :)
  • C-Quellcode

    1. if (tempArray == NULL) {
    2. UIAlertView *alertWhenNull = [[UIAlertView alloc] initWithTitle:@"Keine Nachrichten" message:@"Es sind keine Nachrichten in dieser Kategorie vorhanden." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    3. [alertWhenNull show];
    4. }

    NULL? Wieso nicht nil?

    Und was noch viel spannender ist: diese Abfrage wird vermutlich nie greifen.
    Auch nicht, wenn du sie korrekt platzierst.

    Zur Veranschaulichung:

    C-Quellcode

    1. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    2. {
    3. NSArray *tempArray = [NSKeyedUnarchiver unarchiveObjectWithData:offlineData];
    4. NSInteger count = [tempArray count];
    5. if (tempArray == nil) {
    6. UIAlertView *alertWhenNull = [[UIAlertView alloc] initWithTitle:@"Keine Nachrichten" message:@"Es sind keine Nachrichten in dieser Kategorie vorhanden." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    7. [alertWhenNull show];
    8. }
    9. return count;
    10. }
    Alles anzeigen


    Was meinst du passiert, wenn tempArray == nil ist?
    Da Nachrichten an nil per se erlaubt sind passiert nicht viel, wenn du [nil count] einfach zurückgibst. Das Problem tritt dann später auf.
    So wirst du zur Laufzeit eine Exception bekommen, da count = [nil count] einfach mal nichts zuweist obwohl du den Wert brauchst.

    Wenn aus irgendwelchen Gründen dein Array also eine Nullreferenz hat, fliegt dir das ganze System um die Ohren.
    Deshalb mach wie DroneDeveloper sagt: sorge im App Delegate via Property dafür, dass du ein Array hast.

    Und nun zum programmatischen Hauptproblem: wenn dein Array genau 0 Elemente hat, also leer ist (z.B. via [NSArray array]) greift deine Abfrage nicht, der User sieht aber trotzdem nix.

    Ach ja, das logische Hauptproblem: dieses AlertView ist Schwachsinn.
    Wenn der Nutzer eine leere Tabelle sieht, sagt ihm das was? "Oh, hier gibt es keine Einträge."
    Wieso willst du ihm dann noch per Alert darauf hinweisen, dass es hier keine Einträge gibt? Hältst du ihn für dämlich und willst ihn das unbedingt spüren lassen?
    «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
  • 1. Es erscheint eine Meldung, wenn tempArray nil ist.

    2. count = [temPArray count] weist für tempArray = nil sehr wohl etwas zu, nämlich 0.

    3. Nichtsdestotrotz kann man das mit if( [tempArray count] == 0) wesentlich besser machen, weil nämlich auch keine Message vorliegt, wenn zwar ein Array vorhanden ist, dieses aber keine Einträge enthält.
    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"?
  • Ach ja, das logische Hauptproblem: dieses AlertView ist Schwachsinn.
    Wenn der Nutzer eine leere Tabelle sieht, sagt ihm das was? "Oh, hier gibt es keine Einträge."
    Wieso willst du ihm dann noch per Alert darauf hinweisen, dass es hier keine Einträge gibt? Hältst du ihn für dämlich und willst ihn das unbedingt spüren lassen?


    Nein, ich halte ihn für nicht dumm. In der Aufgabenbeschreibung, war das einfach eine Anforderung, deswegen ein UIAlertView.
    lernen, lernen, lernen :)
  • imoney91 schrieb:

    Ach ja, das logische Hauptproblem: dieses AlertView ist Schwachsinn.
    Wenn der Nutzer eine leere Tabelle sieht, sagt ihm das was? "Oh, hier gibt es keine Einträge."
    Wieso willst du ihm dann noch per Alert darauf hinweisen, dass es hier keine Einträge gibt? Hältst du ihn für dämlich und willst ihn das unbedingt spüren lassen?


    Nein, ich halte ihn für nicht dumm. In der Aufgabenbeschreibung, war das einfach eine Anforderung, deswegen ein UIAlertView.

    Ich würde aber keinen UIAlertView nehmen. Stattdessen würde ich wenn keine Einträge vorhanden sind, in der Tabelle eine „Platzhalter“ Zelle anzeigen, in der dann halt „Es sind keine Nachrichten in dieser Kategorie vorhanden.“ steht. So hat der Anwender die Information, muss aber keinen UIAlertView wegdrücken.

    Michael