2011-10-07 5 views
0

J'essaie de remplir une tableView avec des informations extraites d'une base de données SQLite ... J'ai lu quelques tutoriels et essayé de les suivre, mais pour une raison quelconque, mon application se bloque constamment. ..iOS: remplissage tableView de base de données SQLite

.h

// 
// InOrder.h 
// AGKUnsten 
// 
// Created by Jonas Christensen on 7/12/11. 
// Copyright 2011 __MyCompanyName__. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

@interface InOrder : UIViewController <UITableViewDelegate, UITableViewDataSource> { 

    NSArray *artworkInfo; 
    int rowsInDatabase; 
} 

.m

@property (nonatomic, retain) NSArray *artworkInfo; 

@end 


// 
// InOrder.m 
// AGKUnsten 
// 
// Created by Jonas Christensen on 7/12/11. 
// Copyright 2011 __MyCompanyName__. All rights reserved. 
// 

#import "InOrder.h" 
#import "ArtworkView.h" 
#import "PaintingInfo.h" 
#import "PaintingDatabase.h" 

@implementation InOrder 

@synthesize artworkInfo; 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 

    return 1; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return rowsInDatabase; 
    //return [artworkInfo count]; //Tried to use this, but app just crashes when it reaches this line 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    NSLog(@"test");//To see how far I get in the code - this is outputted 
    //Configure the cell 

    //APP CRASHES IF I TRY TO DO SOMETHING WITH MY DATABASE IN HERE 

    //cell.textLabel.text = [artworkInfo objectAtIndex:indexPath.row];//Tried this 

    //PaintingInfo *info = [artworkInfo objectAtIndex:indexPath.row];//Tried this 
    //cell.textLabel.text = info.artist; 

    //[[cell textLabel] setText:[artworkInfo objectAtIndex:[indexPath row]]];//Thread 1: Program received signal: "SIGABRT" 

    NSLog(@"test2");//Never reach here if I uncomment any of the above 

    return cell; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    self.title = @"Værker"; 

    artworkInfo = [[PaintingDatabase database] findAllArtists]; 

    rowsInDatabase = [artworkInfo count]; 
    NSLog(@"%d", rowsInDatabase); 

} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 

    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 

Toute aide serait grandement apprécié ... Je sais que mes travaux de base de données, comme je suis en mesure d'obtenir des données de celui-ci autre part, mais il semble que lorsque je tente de l'utiliser ici, l'application tombe en panne juste ...

Il est principalement EXC_BAD_ACCESS et SIGABRT qui se est affiché comme l'erreur ...

Maintenant, je l'ai été dit que SIGABORT = "SIGABRT est le signal envoyé lorsque le programme tente de s'annuler. Généralement c'est parce que quelque chose de vraiment mauvais est arrivé. "

et" EXC_BAD_ACCESS se produit lorsqu'un message est envoyé à un objet qui a déjà été libéré. Au moment où l'erreur est pris, la pile d'appel est généralement disparu surtout si le traitement avec plusieurs threads. »

Eh bien, grand .. mais je ne sais pas comment y remédier ... Toute aide ??

Répondre

1

Vous assignez directement à artworkInfo (en viewDidLoad) au lieu d'utiliser la propriété accesseur qui garantirait que le tableau est bien conservé. Votre tableau est probablement (auto) publié par le temps la vue de la table des méthodes de DataSource sont appelés.

Il devrait être:

self.artworkInfo = [[PaintingDatabase database] findAllArtists]; 
+0

Merci! Semblait faire l'affaire :) – user969043

0

Si NSLog(@"%d", rowsInDatabase); vous montre les résultats que vous attendez, alors je soupçonne que artworkInfo n'est pas conservé. En supposant que vous avez déclaré cette façon dans votre fichier .h (si elle est un NSArray et non un NSMutableArray ou autre chose):

@property (nonatomic, retain) NSArray *artworkInfo; 

alors le problème est probablement que cette ligne:

artworkInfo = [[PaintingDatabase database] findAllArtists]; 

plutôt essayer de changer à:

self.artworkInfo = [[PaintingDatabase database] findAllArtists]; 

la différence est que la première ligne attribuera la valeur de la variable directement, tandis que le second exécute réellement par une méthode appelée setArtwork Info: qui, bien que vous ne pouvez pas le voir, est automatiquement créé lorsque vous utilisez @synthesize. Étant donné que la déclaration de propriété contient retain, cette méthode appelle également la méthode retain sur l'objet, de sorte qu'il reste en mémoire après la fin de la méthode. Vous pouvez faire la même chose directement comme celui-ci

artworkInfo = [[[PaintingDatabase database] findAllArtists] retain]; 

Et assurez-vous d'ajouter [artworkInfo release] dans votre méthode dealloc, parce que vous devez toujours .L'appel sur ce que les objets que vous conserviez, lorsque vous avez terminé avec eux.

Questions connexes