2012-08-18 2 views
0

Я хочу распространять заполненную базу данных с помощью своего приложения. Я пытаюсь реализовать SQLitePlugin, но, как говорится на странице, нет никакой документации о том, как это сделать на iOS. Я попытался выполнить этот шаг outdated, но без везения. Кто-нибудь, кто это сделал?Phonegap Плагин SQLite Предварительно заполненная база данных iOS

ответ

1

Я поместил базу данных в папку «Ресурсы» и поместил этот код в 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]; 
} 
+0

Это работало и на меня. Несмотря на то, что PhoneGap по умолчанию отмечал событие webViewDidStartLoad. – matthoiland

0

Следующие сообщения взяты из сообщения в блоге, но поскольку я был слегка отшлепан для публикации ссылок, прежде чем я собираюсь процитировать его. Я отправлю 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

+0

Спасибо, я видел это, но это, к сожалению, для Android, я ищу sth для iOS. – noway

1

Я нашел решение по крайней мере, это работает для меня, так вот:

я и последовал за учебник по ссылке вы упомянули: 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/"]; 

Удалите приложение с тренажера/устройства. А потом запустите .. он работает, моя база данных предварительно заполнена.

+0

Спасибо, я попробую. Кстати, куда вы положили весь этот код? Потому что больше нет 'PhoneGapDelegate.m'. И есть несколько событий 'webViewDidStartLoad'. – noway

+0

Я помещаю этот код в свой MainViewController.m в событие - (void) webViewDidStartLoad: (UIWebView *) theWebView. – Max

+0

Спасибо, я проголосую за ваш ответ. Однако я думаю, что вы не используете этот плагин, но используете встроенную базу данных Webkit. Во всяком случае, я узнал ответ и опубликовал его. – noway

Смежные вопросы