【问题标题】:sqlite db path in bundle acces?捆绑访问中的sqlite db路径?
【发布时间】:2012-01-25 11:49:37
【问题描述】:

我想将我的 sqlite db 放入一个自定义包中,并在多个项目中使用该包。

我已经从 Mac OS X FrameWork&Library -> Bundle 创建了一个新目标,我已经构建了目标,并且我已经将我的 sqlite db 放入了包中。 我已将捆绑包添加到我的 iOS 项目并尝试从中读取数据库。

现在问题来了:我可以获取包并读取它的标识符,但是当我尝试获取 db 的路径时,我得到空返回字符串。

读取db路径的代码:

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 模板,所以我认为我必须在构建设置中进行一些更改,但我不知道是什么。

【问题讨论】:

  • 如果您查看捆绑包本身(使用 Finder 等),那里有 DB 文件吗?

标签: iphone ios sqlite bundle


【解决方案1】:
NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"myDbName" ofType:@"sqlite"];

应该足以在主包中获取 myDbName.sqlite 的路径

编辑: 好的,这就是我所做的,首先,New File -> Resources -> Settings 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); 打印出正确的值,这意味着它已成功加载

【讨论】:

  • 好吧,我的错,我不应该匆忙回答这个问题。我可以确认您的代码运行良好,也许是您的 myDbName.sqlite 没有正确添加到您的 myDbBundle.bundle 中?或者 myDbName.sqlite 实际上包含在你的包内的一个文件夹中?
  • 第一次编辑,这样我就可以删除反对票。您创建了一个新包并向其中添加了一个 sqlite 数据库。你是怎么做到的?步骤是什么?我将编辑我的问题,因为我看到 myDbBundle,bundle 无法加载。我还在文件夹的侧面和外部使用 myDbName.sqlite 进行了测试。
  • 问题在于我将 Mac OS x 的捆绑包创建为新目标。您的带有设置包的版本运行良好。谢谢你的回答。
【解决方案2】:

我自己没有这样做,但是这个博客似乎是你想要做的Universal framework iPhone iOS 2.0

它描述了创建一个框架,该框架可用于打包任何文件,然后根据需要简单地导入到其他项目中。

【讨论】:

  • 谢谢回答,我已经知道了。我想要的只是一个包而不是一个框架。
【解决方案3】:

斯威夫特 3

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

【讨论】:

    猜你喜欢
    • 2012-01-06
    • 2011-03-30
    • 2011-06-24
    • 1970-01-01
    • 2016-07-09
    • 2016-03-05
    • 2015-08-15
    • 2010-10-20
    • 2011-11-10
    相关资源
    最近更新 更多