TableView crasht beim Scrollen

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

  • TableView crasht beim Scrollen

    Ich hole mir einen JSON-Encodierten Inhalt von einer URL und lege diesen auf einen String.
    Ein JSON-Framework verarbeitet diesen und stellt ein NSDictionary zur Verfügung.

    Soweit funktioniert alles sehr gut, korrekte Werte & Ausgaben sind vorhanden.
    Sobald ich allerdings im UITableView scrolle, stürtzt der iPhone Simulator ab.

    Ich bin nun seit 2h auf Fehlersuche & komme leider nicht weiter.

    Vielleicht findet ihr etwas..


    Quellcode

    1. /*
    2. * Kontoauszug.h
    3. */
    4. @interface Kontoauszug : UIViewController {
    5. IBOutlet UILabel *$Kontonummer;
    6. IBOutlet UILabel *$Kontoinhaber;
    7. IBOutlet UILabel *$LetzterUmsatz;
    8. IBOutlet UITableView *kontoUmsaetze;
    9. NSDictionary *data;
    10. NSURL *indexUrl;
    11. NSString *fetchData;
    12. }
    13. @property(nonatomic, retain) IBOutlet UILabel *$Kontonummer;
    14. @property(nonatomic, retain) IBOutlet UILabel *$Kontoinhaber;
    15. @property(nonatomic, retain) IBOutlet UILabel *$LetzterUmsatz;
    16. @property(nonatomic, retain) IBOutlet UITableView *kontoUmsaetze;
    17. @property(nonatomic, retain) NSDictionary *data;
    18. @property(nonatomic, retain) NSURL *indexUrl;
    19. @property(nonatomic, retain) NSString *fetchData;
    20. @end
    Alles anzeigen


    Quellcode

    1. /*
    2. * Kontoauszug.m
    3. */
    4. #import "Kontoauszug.h"
    5. #import "Config.h"
    6. #import "JSON.h"
    7. @implementation Kontoauszug
    8. @synthesize $Kontonummer, $Kontoinhaber, $LetzterUmsatz;
    9. @synthesize kontoUmsaetze;
    10. @synthesize data, indexUrl, fetchData;
    11. - (void)viewDidLoad {
    12. self.navigationItem.title = @"Kontoauszug";
    13. Config *sharedManager = [Config Globales];
    14. indexUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@/allgemein/kontoauszug.php", [sharedManager APIURL]]];
    15. fetchData = [NSString stringWithContentsOfURL:indexUrl encoding:NSUTF8StringEncoding error:nil];
    16. //fetchData = [NSString stringWithString:@"{\"foo\": \"bar\"}"];
    17. data = [fetchData JSONValue];
    18. $Kontonummer.text = [data objectForKey:@"Kontonummer"];
    19. $Kontoinhaber.text = sharedManager.$SESSION_Name;
    20. $LetzterUmsatz.text = [data objectForKey:@"lastSaldo"];
    21. [super viewDidLoad];
    22. }
    23. - (NSInteger)numberOfSectionsInTableView:(UITableView *)atableView {
    24. return 1;
    25. }
    26. - (NSInteger)tableView:(UITableView *)atableView numberOfRowsInSection:(NSInteger)section {
    27. return 15;//[[data objectForKey:@"aktivitaeten"] count];
    28. }
    29. - (NSString *)tableView:(UITableView *)thetableView titleForHeaderInSection:(NSInteger)section{
    30. return @"";
    31. }
    32. - (UITableViewCell *)tableView:(UITableView *)atableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    33. static NSString *CellIdentifier = @"Cell";
    34. UITableViewCell *cell = [kontoUmsaetze dequeueReusableCellWithIdentifier:CellIdentifier];
    35. if (cell == nil) {
    36. cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero] autorelease];
    37. }
    38. UILabel *umsatzTitle = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 20)];
    39. umsatzTitle.backgroundColor = [UIColor redColor];
    40. umsatzTitle.font = [UIFont fontWithName:@"Arial" size:10];
    41. umsatzTitle.text = [NSString stringWithFormat:@"%@", [data objectForKey:@"Kontonummer"]];//[[[data objectForKey:@"aktivitaeten"] objectForKey:action4T] objectForKey:@"action"];
    42. [cell.contentView addSubview:umsatzTitle];
    43. [umsatzTitle release];
    44. return cell;
    45. }
    46. - (CGFloat)tableView:(UITableView *)atableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    47. {
    48. return 20;
    49. }
    50. - (NSIndexPath *)tableView :(UITableView *)theTableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    51. return nil;
    52. }
    53. - (void)didReceiveMemoryWarning {
    54. [super didReceiveMemoryWarning];
    55. }
    56. - (void)dealloc {
    57. [$Kontonummer release];
    58. [$Kontoinhaber release];
    59. [$LetzterUmsatz release];
    60. [kontoUmsaetze release];
    61. [data release];
    62. [indexUrl release];
    63. [fetchData release];
    64. [super dealloc];
    65. }
    66. @end
    Alles anzeigen



    DANKE!
  • Dir scheint noch Grundlagenwissen zu fehlen. Wenn Du keine Setter verwendest, dann erhalten die Objekte natürlich auch ein retain beim Zuweisen und werden vom Autorelease-Pool freigegeben.

    So sollte es funktioniere:

    Quellcode

    1. self.indexUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@/allgemein/kontoauszug.php", [sharedManager APIURL]]];
    2. self.fetchData = [NSString stringWithContentsOfURL:indexUrl encoding:NSUTF8StringEncoding error:nil];
    3. //fetchData = [NSString stringWithString:@"{\"foo\": \"bar\"}"];
    4. self.data = [fetchData JSONValue];
  • peachGames schrieb:

    Hat funktioniert. Wobei mir jetzt nicht klar ist, wann ich ein self. schreiben sollte und wann nicht.

    Mit self greifst Du auf den Setter oder den Getter zu, während Du ohne self direkt auf die Speicherstelle des Attributs zugreifst. Anders ausgedrückt ist beispielsweise self.indexUrl = ...; nur eine kürzere Schreibweise für [self setIndexUrl:...];.
    „Meine Komplikation hatte eine Komplikation.“