2009-11-09 3 views
1

Je travaille sur un projet iphone/Ipod touch impliquant la sauvegarde et la récupération des données d'une base de données sqlite. Cela fonctionne très bien, mais à certains moments du développement je reçois cette erreur (lorsque l'application démarre):Sqlite - problème de "l'archive incompréhensible"

ermination de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '*** - [NSKeyedUnarchiver initForReadingWithData:]: incompréhensible archives (0x4E, 0x49, 0x42, 0x41, 0x72, 0x63, 0x68, 0x69) » 2009-11-09 10: 08: 28,810 FagNavigasjon [1627: 20b]

Auparavant, je n'ai pu résoudre ce problème en revenant à un point plus tôt dans le développement et continue. Cette fois, j'ai découvert que si je commente une certaine partie du code, l'application ne plante pas.

while(sqlite3_step(selectstmt3)==SQLITE_ROW){ 
/* 
      NSString *navn=[[NSString alloc] initWithUTF8String: (char *)sqlite3_column_text(selectstmt3, 0)]; 
     NSString *telefon=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 1)]; 
     NSString *fodselsar=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 2)]; 
     NSString *ariframtiden=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 3)]; 
     NSString *verneplikt=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 4)]; 
     NSString *utdannelse=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 5)]; 
     NSString *epost=[[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(selectstmt3, 6)]; 

     appDelegate.navn=navn; 
     appDelegate.epost=epost; 
     appDelegate.telefon=telefon; 
     appDelegate.fodselsar=fodselsar; 
     appDelegate.studiear=ariframtiden; 
     appDelegate.utdannelse=utdannelse; 
     appDelegate.verneplikt=verneplikt; 
     */ 
    } 

Mais bien sûr, l'application ne charge plus les données. Ce code a déjà fonctionné, et je n'ai pas changé avant cette erreur. J'ai, cependant, ajouté de nouveaux dossiers à la base de données, mais ceux-ci semblent bien quand je les examine dans le gestionnaire de SQLite. Quelqu'un peut-il me dire ce qui peut causer ce problème? Je suis reconnaissant pour toutes les réponses!

Répondre

0

Juste pour les dossiers: j'ai résolu ce problème, même si je ne comprends toujours pas comment. Comme je savais quelle table a causé le problème. J'y suis allé en utilisant le gestionnaire SQLlite et j'ai changé les valeurs de certains champs varchar, et le problème est parti ... Les anciennes valeurs semblaient correctes, cependant. Je voudrais pouvoir expliquer pourquoi cela l'a résolu ...

1

Avez-vous essayé de décommenter chaque ligne une par une pour voir quelle ligne est à l'origine du problème? Si vous connaissez la ligne qui la provoque, essayez de voir si les données de la base de données sont correctes. Si vous utilisez le contrôle de version, essayez de rétablir la base de données avant d'ajouter les nouveaux enregistrements.

p.s. Avez-vous regardé Core Data? Cela pourrait rendre votre vie beaucoup plus facile.

+0

Merci d'avoir répondu! J'ai essayé de décommenter petit à petit, et il est déjà causé par la première ligne: NSString * navn = [[NSString alloc] initWithUTF8String: (char *) sqlite3_column_text (selectstmt3, 0)]; Si je comprends bien la ligne se trouve dans la base de données, mais dès que je commence à lire, je reçois l'erreur ... Je n'ai pas encore vérifié les données de base, mais je le ferai. Merci pour le conseil! – Ezop