Я хочу распространять заполненную базу данных с помощью своего приложения. Я пытаюсь реализовать SQLitePlugin, но, как говорится на странице, нет никакой документации о том, как это сделать на iOS. Я попытался выполнить этот шаг outdated, но без везения. Кто-нибудь, кто это сделал?Phonegap Плагин SQLite Предварительно заполненная база данных iOS
ответ
Я поместил базу данных в папку «Ресурсы» и поместил этот код в MainViewController.m
.
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"this.db"];
if ([fileManager fileExistsAtPath:databasePath] == NO) {
NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"this" ofType:@"db"];
[fileManager copyItemAtPath:resourcePath toPath:databasePath error:&error];
}
Следующие сообщения взяты из сообщения в блоге, но поскольку я был слегка отшлепан для публикации ссылок, прежде чем я собираюсь процитировать его. Я отправлю URL-адрес в конце, хотя, и я рекомендую вам пойти туда для полного объяснения и некоторых последующих комментариев. Эта помощь приносит кредит Скотт Бакель.
1) Используйте этот плагин: https://github.com/chbrody/Cordova-SQLitePlugin/
2) Скопировать файл БД SQLite в папку/активов PhoneGap.
3) Затем следуйте инструкциям здесь: http://gauravstomar.blogspot.com/2011/08/prepopulate-sqlite-in-phonegap.html, чтобы скопировать файл в собственное хранилище. Измените this.copy ("Databases.db", "/ data/data /" + pName + "/ app_database /");
3a) Вместо Databases.db используйте имя файла базы данных. 3b) Вместо app_database используйте «базы данных» 3c) Возможно, вы захотите удалить файл из/assets, так как он дублируется и больше не нужен. Мое приложение было вдвое больше, чем нужно.
4) (Не уверен, что этот шаг необходим, я выхожу из офиса на день). Редактировать SQLitePlugin.java
4a) Линии 176, я отредактировал 1 == 1 так, чтобы оператор if всегда выполнялся. Строка 179 Я изменил this.setStorage (appPackage, false); this.setStorage (appPackage, true);
5) Затем вы можете использовать следующую команду, чтобы открыть БД и использовать его как любой другой базы данных PhoneGap
5a) вар дб = window.sqlitePlugin.openDatabase («[full_database_name_including_extension]», «1,0», «Демонстрация PhoneGap», 200000);
Полный блог: http://www.raymondcamden.com/index.cfm/2012/7/27/Guest-Blog-Post-Shipping-a-populated-SQLite-DB-with-PhoneGap
Спасибо, я видел это, но это, к сожалению, для Android, я ищу sth для iOS. – noway
Я нашел решение по крайней мере, это работает для меня, так вот:
я и последовал за учебник по ссылке вы упомянули: http://gauravstomar.blogspot.fr/2011/08/prepopulate-sqlite-in-phonegap.html
быть уверены, для копирования и прошлых хороших database.db и 000 ... 001.db (хороший - либо в папках/Cache и/Caches/file_0, либо в/WebKit и/WebKit/file__0, я не помню, поэтому попробуйте один то другой, если он не работает). затем я вставил их в каталог проектов моих ресурсов.
я изменить две строки:
NSString *masterPath = [libraryDir stringByAppendingPathComponent:@"WebKit/Databases/"];
NSString *databasePath = [libraryDir stringByAppendingPathComponent:@"WebKit/Databases/file__0/"];
по следующим направлениям:
NSString *masterPath = [libraryDir stringByAppendingPathComponent:@"Caches/"];
NSString *databasePath = [libraryDir stringByAppendingPathComponent:@"Caches/file__0/"];
Удалите приложение с тренажера/устройства. А потом запустите .. он работает, моя база данных предварительно заполнена.
Спасибо, я попробую. Кстати, куда вы положили весь этот код? Потому что больше нет 'PhoneGapDelegate.m'. И есть несколько событий 'webViewDidStartLoad'. – noway
Я помещаю этот код в свой MainViewController.m в событие - (void) webViewDidStartLoad: (UIWebView *) theWebView. – Max
Спасибо, я проголосую за ваш ответ. Однако я думаю, что вы не используете этот плагин, но используете встроенную базу данных Webkit. Во всяком случае, я узнал ответ и опубликовал его. – noway
- 1. Предварительно заполненная база данных Sqlite
- 2. Открытая предварительно заполненная база данных SQLite в Кордове
- 3. PhoneGap - Прочитайте предварительно упакованную базу данных sqlite
- 4. Blackberry - Прикрепите базу данных sqlite, предварительно заполненную
- 5. Приложение iOS: Недостаточная заполненная база данных не допускается - альтернативы?
- 6. Предварительно заполняемая база данных SQLite в iONIC Cordova iOS
- 7. База данных, заполненная дублирующимися записями
- 8. Предварительно заполненная база данных SQLite не читается должным образом в Android Studio
- 9. Открытая предварительно заполненная база данных SQLite в Кордове (для android) и Visual Studio
- 10. База данных SQLite на PhoneGap/iOS - возможно более 5 МБ
- 11. ios - база данных open sqlite
- 12. phonegap sqlite база данных максимальный размер?
- 13. Android Предварительно заполненная база данных - добавление новых предварительно заполненных строк после публикации
- 14. PhoneGap + android, Предварительно заполняемая база данных не работает.
- 15. Основные данные Предварительно заполненная проблема SQLite, z-metadata
- 16. Как установить плагин SQLIte в Android + iOS в Phonegap
- 17. Phonegap Реляционная база данных
- 18. База данных PhoneGap
- 19. Работа с предварительно заполненной базой данных sqlite в phonegap android
- 20. Импортировать существующую базу данных SQLite в приложение iOS Phonegap
- 21. База данных SQLite не создана в приложении Phonegap (Android)
- 22. Предварительно загруженная база данных с основными данными
- 23. Предварительно заполненная подсказка в Ruby
- 24. PhoneGap 3.0 iOS-плагин
- 25. Как написать запрос типа IN в android (предварительно заполненная база данных)
- 26. Большая база данных SQLITE в iOS
- 27. База данных не найдена ... iOS/SQLite
- 28. база данных заблокирована error sqlite Ios
- 29. База данных ios Sqlite - Выберите запрос
- 30. База данных Sqlite в iOS при завершении
Это работало и на меня. Несмотря на то, что PhoneGap по умолчанию отмечал событие webViewDidStartLoad. – matthoiland