2009-07-24 24 views
0

Etwas wirklich komisches ist meinem Quellcode passiert. Die Anwendung wurde immer erfolgreich erstellt, und ich konnte die Anwendung immer starten. In letzter Zeit stürzt die App jedoch ab, wenn ich sie starte und den folgenden Fehler in der Konsole zurückmelde:iPhone App stürzt beim Start aufgrund von Inkonsistenzen ab?

2009-07-23 20:30:06.390 App[15652:20b] Database Successfully Opened :) 
2009-07-23 20:30:06.393 App[15652:20b] *** Assertion failure in -[AppDelegate initializeTableData], /Users/me/Desktop/App/Classes/AppDelegate.m:39 
2009-07-23 20:30:06.394 App[15652:20b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error preparing statement' 
2009-07-23 20:30:06.394 App[15652:20b] Stack: (

Ich verstehe nicht. Die App würde immer erfolgreich ohne Fehler gestartet werden. Aber jetzt bekomme ich diesen Fehler. Ich hatte meinen Quellcode auf dem Weg gesichert und jetzt, wenn ich diese älteren Versionen erstelle, bekomme ich den gleichen Fehler. Wie ist das überhaupt möglich? Kann Code schlecht werden? Wenn ich zuvor erfolgreich eine Anwendung starten konnte, gehe ich heute zurück und kompiliere es neu und es wird ein Fehler zurückgegeben ... DAS GLEICHE CODE-TEIL?

Der Fehler scheint dieses Stück Code in meiner AppDelegate-Datei zu verweisen:

enter code -(void)initializeTableData { 
entries = [[NSMutableArray alloc] init]; 
sqlite3 *db = [AppDelegate getNewDBConnection]; 
sqlite3_stmt *statement = nil; 
const char *sql = "select * from dict"; 
if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL) != SQLITE_OK) 
    NSAssert1(0,@"Error preparing statement", sqlite3_errmsg(db)); 
else 
{ 
    while(sqlite3_step(statement) == SQLITE_ROW) { 
     // Read the data from the result row 
     NSString *aGurmukhi = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]; 
     NSString *aShahmukhi = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)]; 
     NSString *aPOS = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)]; 
     NSString *aEnglish = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)]; 
     // Create a new animal object with the data from the database 
     Entry *entry = [[Entry alloc] initWithName:aGurmukhi shahmukhi:aShahmukhi pos:aPOS english:aEnglish]; 

     // Add the animal object to the animals Array 
     [entries addObject:entry]; 

     [entry release]; 
    } 
} 
//release the resources 
sqlite3_finalize(statement); 

}

+(sqlite3 *) getNewDBConnection{ 
sqlite3 *newDBconnection; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"pedict.db"]; 
// Open the database. The database was prepared outside the application. 
if (sqlite3_open([path UTF8String], &newDBconnection) == SQLITE_OK) { 

    NSLog(@"Database Successfully Opened :)"); 

} else { 
    NSLog(@"Error in opening database :("); 
} 

return newDBconnection; 

}

Es scheint ein Problem mit der Datenbankverbindung, aber ich bin immer noch verwirrt darüber, wie das alles möglich ist. Bitte helfen Sie mir ... Ich habe schon sechs Stunden Debugging, mit wenig Erfolg

Antwort

0

Haben Sie die Datenbank zufällig geändert? Normalerweise bekomme ich diesen Fehler, wenn ich die Datenbank in meinem Projekt geändert habe, aber noch keine Neuinstallation der App auf dem Simulator/Gerät vorgenommen habe.

Wenn Sie die Apple-Beispielanwendung für Datenbankvorgänge verwenden, erstellt sie beim ersten Ausführen der App eine Kopie der Datenbank im Ordner "Documents" und führt alle Vorgänge in dieser Datenbank aus. Wenn Sie Ihre Datenbankdatei ändern, müssen Sie die App von Ihrem Gerät/Simulator löschen und dann eine Neuinstallation durchführen.

+0

Danke, es scheint, dass mein XCode-Projekt vom Simulator beschädigt wurde. Ich erstelle einfach ein neues Projekt und kopiere alle Dateien und es scheint zu funktionieren. – Kulpreet

0

gut, Sie wissen genau, welche Zeile fehlschlägt: es ist der Aufruf an sqlite3_prepare_v2. Es sieht aus wie Sie nicht die Fehlermeldung zu sehen, so eine Zeile wie

NSLog(@"SQL error message: %s", sqlite3_errmsg(db)); 

direkt vor dem assert hinzufügen und vielleicht die Ihnen sagen, was falsch ist.

+0

"SQL Fehlermeldung: keine solche Tabelle: dict" hmmm ... sehr interessant ... was sind die Möglichkeiten – Kulpreet

+0

Ich habe gerade meine pedict.db Datei überprüft und es gibt eine Tabelle mit dem Namen dict – Kulpreet

+0

immer noch kein Glück hier – Kulpreet

Verwandte Themen