我想将我的sqlite数据库放入自定义包中,并在多个项目中使用该包。
我已经从Mac OS X FrameWork& Library创建了一个新目标 - >捆绑,我已经构建了目标,我已经将我的sqlite数据库放入了捆绑包中。 我已将软件包添加到我的iOS项目中,并尝试从中读取数据库。
现在出现了问题:我可以获取bundle并读取其标识符但是当我尝试获取db的路径时,我得到null返回字符串。
读取数据库路径的代码:
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数据库和女巫可以从ios应用程序读取?为了创建捆绑包,我在Mac OS X下使用了xcode模板,所以我认为我必须在构建设置中更改某些内容,但我不知道是什么。
答案 0 :(得分:4)
NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"myDbName" ofType:@"sqlite"];
应该足以在主包中获取myDbName.sqlite的路径
编辑: 好的,这就是我做的,首先是新文件 - >资源 - >设置Bundle,创建一个新的,命名为myDbBundle,然后右键单击新创建的bundle,在其中添加myDbName.sqlite,确保它不在en.lproj中。此外,请确保在创建新捆绑包时,勾选目标以将其包含在当前目标中,因为这不是Settings.bundle,您希望包含它。然后运行你的代码,它工作正常。
这是我使用的代码
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 :(得分:1)
我自己没有这样做,但是这个博客似乎就是你要做的事情Universal framework iPhone iOS 2.0
它描述了创建一个框架,可用于打包任何文件,然后根据需要简单地导入到其他项目中。
答案 2 :(得分:0)
Swift 3
let dbname = Bundle.main.path(forResource: "horoscope-release", ofType: "sqlite")!