Где бы вы разместили свой файл базы данных SQLite в приложении для iPhone?

Когда я изначально создаю файл базы данных SQLite с предварительно вставленными наборами данных для моего приложения, мне пришлось бы разместить этот файл где-нибудь в моем проекте Xcode, чтобы он попал в мое приложение для iPhone. Я думаю, что «ressources» – это подходящее место для этого.

Каковы основные «шаги» для развертывания файла базы данных SQLite в приложении iPhone?

  • создание базы данных вручную
  • добавление файла базы данных в проект (где?)

В настоящее время я читаю всю документацию по SQLite, хотя это немного связано с iPhone.

Сначала вам нужно добавить файл SQLite в свой проект Xcode – наиболее подходящее место в папке ресурсов.

Затем в файле кода делегирования приложения в методе appDidFinishLaunching вам необходимо сначала проверить, была ли уже создана записываемая копия файла SQLite, то есть: копия файла SQLite была создана в папке документов пользователя на Файловая система iPhone. Если да, вы ничего не делаете (иначе вы перезаписываете его с помощью копии Xcode SQLite по умолчанию)

Если нет, то вы копируете там файл SQLite – чтобы сделать его доступным для записи.

См. Приведенный ниже пример кода, чтобы сделать это: это было взято из примера кода SQLite книги Apple, где этот метод вызывается из приложения, который делегирует метод 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]); } } 

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

Вот приведенный выше код в 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)") } } } 

Если вы просто собираетесь запрашивать данные, вы можете оставить его в главном комплекте.

Это, однако, вероятно, не является хорошей практикой. Если вы планируете продлить свое приложение в будущем, чтобы обеспечить запись в базу данных, вам придется все выяснить по-другому …

  • Как сохранить изображение в базе данных SQLite
  • Как сделать UPDATE при соединении таблиц в SQLite?
  • Запрос LIMIT / OFFSET Sqlite
  • Как использовать регулярное выражение в SQLite-запросе?
  • Sqlite преобразует строку на сегодняшний день
  • Эффективный подкачки в SQLite с миллионами записей
  • Лучшее место для подключения к базе данных
  • Каков наилучший способ подключения и использования базы данных sqlite из C #
  • База данных не копирует из активов
  • Как разблокировать базу данных SQLite?
  • Как создать базу данных в android?
  • Давайте будем гением компьютера.