Gdzie umieścić plik bazy danych SQLite w aplikacji na iPhone ' a?

Kiedy początkowo utworzyć plik bazy danych SQLite z wstępnie wstawionych zestawów danych dla mojej aplikacji, musiałbym umieścić ten plik gdzieś w moim projekcie Xcode tak, że idzie do mojej aplikacji iPhone. Myślę ,że "ressources" jest właściwym miejscem na to.

Jakie są podstawowe "kroki" wdrożenia pliku bazy danych SQLite w aplikacji iPhone?

  • ręczne tworzenie bazy danych
  • dodanie pliku bazy danych do projektu (gdzie?)

I ' m obecnie czytam całą dokumentację SQLite, chociaż nie jest to dużo związane z iPhonem.

Author: Peter Mortensen, 2009-04-04

2 answers

Musisz najpierw dodać plik SQLite do projektu Xcode - Najbardziej odpowiednie miejsce znajduje się w folderze zasoby.

Następnie w pliku kodu delegata aplikacji, w metodzie appDidFinishLaunching, musisz najpierw sprawdzić, czy zapisywalna kopia pliku SQLITE została już utworzona - czyli: kopia pliku SQLITE została utworzona w folderze Dokumentów users w systemie plików iPhone ' a. Jeśli tak, nic nie robisz (w przeciwnym razie Nadpisz go domyślnym Xcode Kopia SQLite)

Jeśli nie, skopiujesz tam plik SQLite - aby można było go zapisać.

Zobacz poniższy przykład kodu, aby to zrobić: zostało to zaczerpnięte z przykładowego kodu Apple ' a SQLite books, gdzie ta metoda jest wywoływana z metody appdidfinishlaunching.

// Creates a writable copy of the bundled default database in the application Documents directory.
- (void)createEditableCopyOfDatabaseIfNeeded {
    // First, test for existence.
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"bookdb.sql"];
    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success)
        return;
    // The writable database does not exist, so copy the default to the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"bookdb.sql"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if (!success) {
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }
}

============

Oto powyższy kod w Swift 2.0 +

// Creates a writable copy of the bundled default database in the application Documents directory.
private func createEditableCopyOfDatabaseIfNeeded() -> Void
{
    // First, test for existence.
    let fileManager: NSFileManager = NSFileManager.defaultManager();
    let paths:NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory:NSString = paths.objectAtIndex(0) as! NSString;
    let writableDBPath:String = documentsDirectory.stringByAppendingPathComponent("bookdb.sql");

    if (fileManager.fileExistsAtPath(writableDBPath) == true)
    {
        return
    }
    else // The writable database does not exist, so copy the default to the appropriate location.
    {
        let defaultDBPath = NSBundle.mainBundle().pathForResource("bookdb", ofType: "sql")!

        do
        {
            try fileManager.copyItemAtPath(defaultDBPath, toPath: writableDBPath)
        }
        catch let unknownError
        {
            print("Failed to create writable database file with unknown error: \(unknownError)")
        }
    }
}
 70
Author: Raj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-16 20:43:38

Jeśli chcesz po prostu pytać o dane, powinieneś być w stanie zostawić je w głównym pakiecie.

To jednak prawdopodobnie nie jest dobra praktyka. Jeśli miałbyś rozszerzyć swoją aplikację w przyszłości, aby umożliwić pisanie baz danych, musiałbyś wszystko wymyślić ponownie...

 6
Author: Willi Ballenthin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-23 12:30:35