Hallo,
ich habe folgendes Problem, bei dem ich einfach nicht weiter komme:
Meine App nutzt eine sqlite3-Datenbank (read-only), die mit jedem Update der App über iTunes komplett überschrieben werden soll.
In einem Forum habe ich gelesen, daß bei einem Update der App über iTunes das alte App-Bundle uninstalliert wird und das neue App-Bundle installiert wird, aber die User Daten, die mit dem App-Bundle verbunden sind, bleiben intakt. Mit jedem Aufruf der App sollte der hier dargestellte Code die SQLite Datenbank aus dem App-Bundle in die User-Datenbank kopieren und damit die alte Datenbank überschreiben.
Im Simulator funktioniert das gut, aber über iTunes wird die Datenbank nicht aktualisiert, sondern die alte Datenbank bleibt bestehen.
Frage 1: Was mache ich falsch ?
Frage 2: Kann es sein, daß ich die alte Datenbank im User-Filesystem zunächst löschen muss? Wenn ja, ist dies der richtige Befehl dazu und wo muss ich diesen in meinen Code einfügen?
[fileManager removeFileAtPath:databasePath handler:nil];
Frage 3: Muss ich [fileManager release]; ausführen?
Frage 4: Wo muss die sqlite-Datenbank in dem Xcode-Projekt abgelegt werden? Im Root-Verzeichnis oder im Ressourcen-Verzeichnis?
Im SQLite App Delegate.m habe ich folgenden Code verwendet, es gibt weder eine Fehlermeldung, noch eine Warnung.
Alles anzeigen
Wäre super, wenn ihr eine Lösung findet !
Danke,
Alexander
ich habe folgendes Problem, bei dem ich einfach nicht weiter komme:
Meine App nutzt eine sqlite3-Datenbank (read-only), die mit jedem Update der App über iTunes komplett überschrieben werden soll.
In einem Forum habe ich gelesen, daß bei einem Update der App über iTunes das alte App-Bundle uninstalliert wird und das neue App-Bundle installiert wird, aber die User Daten, die mit dem App-Bundle verbunden sind, bleiben intakt. Mit jedem Aufruf der App sollte der hier dargestellte Code die SQLite Datenbank aus dem App-Bundle in die User-Datenbank kopieren und damit die alte Datenbank überschreiben.
Im Simulator funktioniert das gut, aber über iTunes wird die Datenbank nicht aktualisiert, sondern die alte Datenbank bleibt bestehen.
Frage 1: Was mache ich falsch ?
Frage 2: Kann es sein, daß ich die alte Datenbank im User-Filesystem zunächst löschen muss? Wenn ja, ist dies der richtige Befehl dazu und wo muss ich diesen in meinen Code einfügen?
[fileManager removeFileAtPath:databasePath handler:nil];
Frage 3: Muss ich [fileManager release]; ausführen?
Frage 4: Wo muss die sqlite-Datenbank in dem Xcode-Projekt abgelegt werden? Im Root-Verzeichnis oder im Ressourcen-Verzeichnis?
Im SQLite App Delegate.m habe ich folgenden Code verwendet, es gibt weder eine Fehlermeldung, noch eine Warnung.
Quellcode
- @implementation SQLiteTutorialAppDelegate
- @synthesize window;
- @synthesize viewController;
- - (void)applicationDidFinishLaunching:(UIApplication *)application {
- [self copyDatabaseIfNeeded];
- [window addSubview:viewController.view];
- [window makeKeyAndVisible];
- }
- - (void) copyDatabaseIfNeeded {
- // Check if the SQL database has already been saved to the users phone, if not then copy it over"
- // Create a FileManager object, we will use this to check the status of the database and to copy it over if required"
- NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error; NSString *dbPath = [self getDBPath];
- // Check if the database has already been created in the users filesystem
- // BOOL success = [fileManager fileExistsAtPath:dbPath];
- // If the database already exists then return without doing anything
- // if(!success) {
- // If not then proceed to copy the database from the application to the users filesystem
- [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Foemidb4.sqlite"];
- // Copy the database from the package to the users filesystem
- // [fileManager removeFileAtPath:dbPath handler:nil];
- BOOL success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
- if (!success) NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
- // [fileManager release];
- // }
- @end
- }
Wäre super, wenn ihr eine Lösung findet !
Danke,
Alexander