j'ai un problème depuis quelque temps que je ne peux pas résoudre:requête SQLite ne peut pas être appelé à partir d'un contrôleur
Dans le applicationDidFinishLaunching j'ai ce code:
[self checkAndCreateDatabase];
[self readCharsFromDatabase];// which stores into an array some objects
[self readGlyphsFromDatabaseAtId:@"a"];// idem
Le second tableau i « utilise dans un ViewController secondaire et je reçois le tableau dans le viewDidLoad avec:
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
self.array = delegate.array2;
Tout parfait jusqu'à maintenant, juste que je veux lancer une nouvelle requête avant d'obtenir le array2. J'essaye avec ceci:
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
[delegate readGlyphsFromDatabaseAtId:@"b"];// which is supposed to override my array2 with new values
self.array = delegate.array2;
Cela arrête mon application sans erreur. Je reçois ce message que:
GNU gdb 6.3.50-20050815 (version d'Apple gdb-966) (mar 10 mars 02:43:13 UTC 2009) Copyright 2004 Free Software Foundation, Inc. GDB est gratuit logiciel, couvert par la GNU General Public License, et vous êtes le bienvenue pour le changer et/ou distribuer des copies de celui-ci sous certaines conditions. Tapez "show copy" pour voir les conditions. Il n'y a absolument aucune garantie pour GDB. Tapez "show warranty" pour plus de détails. Cette GDB a été configuré comme « i386-apple-darwin » .sharedlibrary apply-charge toutes les règles Fixation pour traiter 4736.
Ma méthode est appelée jusqu'à ce point, après je ne suis pas un NSLog ni dans le si, ni dans le autre:
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
quelqu'un peut-il aider? Ou si la logique est fausse de me montrer la bonne façon de le faire? Si ce n'est pas trop grand pour la mémoire, je peux stocker toute la base de données dans certains tableaux, il a 400kb Merci!
EDIT: Voici comment ressemble ma fonction:
-(void) readGlyphsFromDatabaseAtId:(NSString *)charId {
NSLog(@"reading glyphs for id %@", charId);
// Setup the database object
sqlite3 *database;
// Init the animals Array
glyphs = [[NSMutableArray alloc] init];
NSLog(@"1");
// Open the database from the users filessytem
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
NSLog(@"reading row");
// Setup the SQL Statement and compile it for faster access
NSString *query = [NSString stringWithFormat:@"SELECT nr,title,description FROM `glyphs` WHERE `id`='%@'", charId];
NSLog(@"%@", query);
//const char *sqlStatement = "SELECT nr,title,description FROM `glyphs` WHERE `id`='b'";
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, [query UTF8String], -1, &compiledStatement, nil) == SQLITE_OK) {
NSLog(@"prepared OK");
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
//NSLog(@"reading row");
NSString *aNr = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
NSString *aTitle = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
NSString *aDescription = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
//NSLog(@"glyph: %@ %@ %@", aNr, aTitle, aDescription);
Glyph *g = [[Glyph alloc] initWithCharId:charId glyphNr:aNr glyphTitle:aTitle glyphDescription:aDescription];
[glyphs addObject:g];
[g release];
}
}
else {
NSLog(@"not prepared");
}
// Release the compiled statement from memory
sqlite3_finalize(compiledStatement);
}
else{
NSLog(@"sqlite not ok");
}
sqlite3_close(database);
NSLog(@"fin reading database2");
}
Si elle tombe juste dans GDB sans message d'erreur apparaît, comment savez-vous qu'il est en fait une erreur? Avez-vous essayé d'exécuter «Construire et analyser», et d'utiliser le détecteur de fuites de mémoire et tous les autres outils très utiles pour résoudre ce genre de problèmes? – Jacob
Assurez-vous également que vous ne disposez pas d'un point d'arrêt que vous avez oublié. – nall
Merci pour les conseils, je suis au début avec l'iphone, 2-3 semaines donc il sera difficile pour moi d'utiliser ces outils, mais je vais essayer. Je n'ai pas non plus de points de rupture. Donc, il n'y a rien de mal avec ma méthode? –