在开发中有时我们需要把数据库文件打包到我们的项目中,一般我们都是在外部用工具生成数据库文件,然后拉入项目中,但是我们在程序中查找改文件时,返回的路径总是nil

解决办法:

原因我们拉入其他资源文件(比如:图片、代码文件等)Xcode都会自动添加到target 的 "Build Phases" 下 "Copy Bundle Resources目录下,但是我们拉过来的数据库文件这里是找不到的,可能是Xcode无法识别这类文件(当我们拉去过来时),所以我们要做的就是把刚才添加的db文件加入该目录下,如图

这样就OK了,运行代码就可以找到了该数据库文件的路径了。接下来上代码:

- (void)_testDataBaseHandle
{static NSString *const DATABASE_FILE_NAME = @"exiu.db";NSString *dbFilePath ;//获取应用程序的路径NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);NSString *documentFolderPath = [searchPaths objectAtIndex:0];NSLog(@"docoumentFolderPath=%@",documentFolderPath);//往应用程序路径中添加数据库文件名称,把它们拼接起来, 这里用到了宏定义(目的是不易出错)dbFilePath = [documentFolderPath stringByAppendingPathComponent:DATABASE_FILE_NAME];NSLog(@"dbFilePath = %@",dbFilePath);///*为什么要往应用程序里添加数据库文件这个过程:因为下面要进行判断,会根据这个路径去查找应用程序的路径中到底有没有这个文件,如果有,则不用在此拷贝了,如果没有,则重新拷贝一次,数据库文件必须添加进取,否则无法进行数据库的操作,而且必须添加一次,那么为什么必须要添加一次呢?因为我们在程序中实现对数据库的修改,然而却又把数据库添加了一次,那么新添加的数据库就会把旧的数据库覆盖掉,那么程序中对数据库的修改也不能实现,所以数据库只能添加一次且是在程序运行初添加*///根据上面拼接好的路径 dbFilePath ,利用NSFileManager 类的对象的fileExistsAtPath方法来检测是否存在,返回一个BOOL值//1. 创建NSFileManager对象  NSFileManager包含了文件属性的方法NSFileManager *fm = [NSFileManager defaultManager];//2. 通过 NSFileManager 对象 fm 来判断文件是否存在,存在 返回YES  不存在返回NOBOOL isExist = [fm fileExistsAtPath:dbFilePath];//- (BOOL)fileExistsAtPath:(NSString *)path;//如果不存在 isExist = NO,拷贝工程里的数据库到Documents下if (!isExist){//拷贝数据库//获取工程里,数据库的路径,因为我们已在工程中添加了数据库文件,所以我们要从工程里获取路径NSString *backupDbPath = [[NSBundle mainBundle]pathForResource:@"exiu"ofType:@"db"];//这一步实现数据库的添加,// 通过NSFileManager 对象的复制属性,把工程中数据库的路径拼接到应用程序的路径上BOOL cp = [fm copyItemAtPath:backupDbPath toPath:dbFilePath error:nil];NSLog(@"cp = %d",cp);//- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)errorNSLog(@"backupDbPath =%@",backupDbPath);if (cp) {NSError *error;//这里验证程序运行时,copy成功后,删除mainbundle里的文件BOOL bl = [fm removeItemAtPath:backupDbPath error:&error];}}NSLog(@"isExist =%d",isExist);
}

下面说说copy文件成功后,删除main bundle下的源文件的可行性

如果是在模拟器下,你运行发现是可以的!这样并不意味着在真机上是可行的。经过真机测试,发现会报错!!因为程序在真机真机上运行时,bundle 是只读的!所以千万不要运行时修改程序bundle下的任何文件!!!

上面说到,程序运行时,程序bundle是只读的,这也是我们为什么要把数据文件copy到Document文件加下的原因!我们这个数据文件肯定是要进行增删改查操作的。

参考:http://stackoverflow.com/questions/21507028/ios-sqlite-db-path-from-nsbundle-mainbundle-returns-null

http://stackoverflow.com/questions/9002208/sqlite-db-path-in-bundle-acces

http://www.mindfiresolutions.com/Never-try-to-delete-any-resource-from-NSBundle-in-iPhoneiPadiPod-on-runtime-1523.php

iOS 把数据库文件打包到mainbundle中,查找不到路径的解决办法;以及在删除bundle中文件的可行性相关推荐

  1. iOS 把数据库文件打包到mainbundle中,查找不到路径的解决的方法;以及在删除bundle中文件的可行性...

    在开发中有时我们须要把数据库文件打包到我们的项目中.一般我们都是在外部用工具生成数据库文件,然后拉入项目中.可是我们在程序中查找改文件时.返回的路径总是nil 解决的方法: 原因我们拉入其它资源文件( ...

  2. iOS 把数据库文件打包到mainbundle中,查找不到路径的解决办法

    在开发中有时我们需要把数据库文件打包到我们的项目中,一般我们都是在外部用工具生成数据库文件,然后拉入项目中,但是我们在程序中查找改文件时,返回的路径总是nil 解决办法: 原因我们拉入其他资源文件(比 ...

  3. vbs文件CreateObject(WScript.Shell)找不到中文路径的解决办法

    文章目录 问题出现 尝试解决 解决办法 第1步:把文件名改成txt 第2步:打开txt 第3步:点击`文件` 第4步:点击`另存为` 第5步:点击`编码` 第6步:将编码更改成ANSI 第7步:点击保 ...

  4. oracle数据库无法查询,关于oracle中无法查询中文条件的解决办法

    1. 检查一个简单的sql = select * from tb_user_master where name = '张三' 表中存有该数据,但是检索无结果 2.解决方法很简单 -   SELECT ...

  5. Android 将音乐文件打包到程序中并设置为铃声的详细方法介绍

    本文主要介绍如何将音乐文件打包到程序中并设置为铃声 首先,将我们的铃声文件放到res/raw目录下,没有的话就建一个raw目录 如图 canon.mp3文件放到raw目录下 然后在程序里读取这个文件: ...

  6. 使用webpack打包后,vscode中vue代码变白色的解决办法

    使用webpack打包后,vscode中vue代码变白色的解决办法 卸载vetur,重装vetur

  7. VSCode中.py文件找不到路径的解决办法

    遇到的问题: 近期通过VSCode学Python,但由于之前没系统性接触过命令行,所以一度造成了些许麻烦. 在VSCode里面运行xxx.py时,由于刚开始工作目录没有设置,按初始化的目录,需要一步步 ...

  8. 打包时出现的异常。XXXXXXX-1.0-SNAPSHOT.jar中没有主清单属性的解决办法

    打包时异常信息如下: Some problems were encountered while building the effective model for com.llq:redis:jar:1 ...

  9. 计算机内容的ppt,电脑打开ppt文件出错提示ppt中的内容有问题如何解决

    ‍ 今天在本文中主要介绍一下在电脑系统中打开ppt文件出错提示ppt中的内容有问题的解决方法.有个用户从网上下载了一些PPT,包括.ppt和.pptx两种版本文件,点击打开总是提示ppt的内容有问题. ...

最新文章

  1. Winform与Webform中的对话框
  2. 珍惜那些爱你的人,不要令他们失望,加油吧,我们。
  3. 【Jetpack 】
  4. 将tomcat添加到服务中
  5. 使用PostgreSQL使用Spring Boot和JPA构建基本应用
  6. Error loading WebappClassLoader解决方法
  7. 统计学习导论_统计学习导论 | 读书笔记11 | 多项式回归和阶梯函数
  8. 计算机网络工程师模拟题库,计算机网络工程师模拟题56.doc
  9. 稀疏编码的经典解法——ISTA算法的推导
  10. 变分法,欧拉-拉格朗日方程推导
  11. java 100以内的偶数的和_java 2.3 循环语句计算100以内的偶数和(五种方法)
  12. memcached的安装
  13. python设置单元格宽度_【部分解决】openpyxl的excel设置列宽自适应+设置行高
  14. package.json bin的作用
  15. 【视频异常检测综述-论文阅读】Deep Video Anomaly Detection: Opportunities and Challenges
  16. 无影云桌面-网上电脑
  17. 【211】win10快捷键大全
  18. io vivado 怎么查看ps_基于Vivado的嵌入式开发 ——PS+PL实践
  19. ATTCK v10版本战术介绍—资源开发
  20. MTU and MSS

热门文章

  1. 手把手教你springboot企业微信开发(三)之 weui、zepto、thymeleaf
  2. wsl2重装docker遇到的问题汇总(亲测有效)
  3. java传智考试答案_传智播客java考试习题3
  4. 如何用命令行启动mysql_命令行方式启动mysql 如何用命令行启动mysql
  5. 阴阳师2月11服务器维护,[公告] 《阴阳师》2月11日正式服维护详情
  6. 从五笔到语音,输入法带来了沟通上的什么变革?
  7. idea打jar包没有主清单属性
  8. 微信公众号每天定时给女友发送天气信息--0基础学会
  9. 【CSS】元素居中总结-水平居中、垂直居中、水平垂直居中
  10. 3.1、3.0U盘或者2.0U盘,插入电脑没有显示的解决办法。