sqlite дБ путь в комплекте доступ? - PullRequest
1 голос
/ 25 января 2012

Я хочу добавить свою базу данных sqlite в пользовательский пакет и использовать этот пакет в нескольких проектах.

Я создал новую цель из Mac OS X FrameWork & Library -> Bundle, я собрал цель, и я поместил свою базу данных sqlite в комплект.Я добавил пакет в свой проект iOS и попытался прочитать из него базу данных.

Теперь возникает проблема: я могу получить пакет и прочитать его идентификатор, но когда я пытаюсь получить путь для базы данных, я получаюпустая возвращаемая строка.

Код для чтения пути к базе данных:

NSBundle *myDbBundle  = [NSBundle bundleWithPath:[[NSBundle mainBundle]pathForResource:@"myDbBundle" ofType:@"bundle"]];
NSLog(@"BundleIdentifier:%@",[myDbBundle bundleIdentifier]);
NSString *databasePath = [myDbBundle pathForResource:@"myDbName" ofType:@"sqlite"];
NSLog(@"DataBasePath:%@",databasePath);

Любые предложения, документы или учебные материалы по этой проблеме приветствуются.

Обновление: похоже, яне могу загрузить пакет, поэтому, когда я пытаюсь прочитать из него, у меня не получается.

Код:

    NSError *error;
    NSLog(@"LoadBundle:%@",[myDbBundle loadAndReturnError:&error]?@"yes":@"no");
    NSLog(@"Error:%@",[error localizedDescription]);

Так что реальная проблема заключается в том, как создать пакет в месте, которое я помещаюsqlite db и witch можно прочитать из приложения ios?Для создания пакета я использовал шаблон xcode под Mac OS X, поэтому я думаю, что мне нужно что-то изменить в настройках сборки, но я не знаю, что.

Ответы [ 3 ]

4 голосов
/ 25 января 2012
NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"myDbName" ofType:@"sqlite"];

должно быть достаточно хорошо, чтобы получить путь к myDbName.sqlite внутри вашего основного пакета

РЕДАКТИРОВАТЬ: Хорошо, вот что я сделал, во-первых, Новый файл -> Ресурсы -> Пакет настроек, создайте новый, назовите его myDbBundle, затем щелкните правой кнопкой мыши по этому вновь созданному пакету, добавьте в него myDbName.sqlite, убедитесь, что он не внутри en.lproj.Кроме того, убедитесь, что при создании нового пакета вы отметите цели, чтобы включить их в текущую цель, поскольку это не Settings.bundle, вы хотите включить его.Затем запустите ваш код, он работает нормально.

enter image description here

и вот код, который я использую

NSBundle* bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"myDbBundle" ofType:@"bundle"]];
NSLog(@"%@", bundle);
NSString* test = [bundle pathForResource:@"myDbName" ofType:@"sqlite"];
NSLog(@"%@", test);
NSDictionary* dict = [NSDictionary dictionaryWithContentsOfFile:[bundle pathForResource:@"Root" ofType:@"plist"]];
NSLog(@"%@", dict);

NSLog(@"%@", dict); выводит правильное значение,это означает, что он успешно загружен

1 голос
/ 25 января 2012

Я сам этого не делал, но, похоже, вы пытаетесь сделать этот блог Универсальная платформа iPhone iOS 2.0

В ней описывается создание инфраструктуры, которую можно использоватьупакуйте любые файлы и затем просто импортируйте их в другие проекты по мере необходимости.

0 голосов
/ 25 декабря 2016

Swift 3

let dbname = Bundle.main.path(forResource: "horoscope-release", ofType: "sqlite")!

...