问题
在使用数据库的时候,模拟器上能对数据库进行增删改等操作,但是在真机上运行就无法进行这些操作了.
解决
在模拟器和真机上数据库存储的文件夹不同,而在真机上因为苹果的限制无法修改 沙盒内的三个文件夹 以外的文件夹,所以需要把数据库拷贝到沙盒中.
获取数据库的方式也要修改
代码
原代码 (获取数据库)
NSString *dbPath=[[NSBundle mainBundle] pathForResource:@"dataBaseName" ofType:@"db"];
_dataBase = [FMDatabase databaseWithPath:dbPath];
解决代码
(红色字体是根据各自需要修改的地方)
// 获取 Document 文件夹
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
// 路径
NSString *documentsDirectory = [paths firstObject];
// 获取数据库路径 dataBaseName : 数据库名称
NSString *documentLibraryFolderPath = [documentsDirectory stringByAppendingPathComponent:@"dataBaseName"];
// 判断数据库是否在目录下,如果没有就创建(拷贝)进来
if ([[NSFileManager defaultManager] fileExistsAtPath:documentLibraryFolderPath]) {
NSLog(@"文件已经存在了");
}else {
NSString *resourceSampleImagesFolderPath =[[NSBundle mainBundle]
pathForResource:@"dataBaseName"
ofType:@"db"];
NSData *mainBundleFile = [NSData dataWithContentsOfFile:resourceSampleImagesFolderPath];
[[NSFileManager defaultManager] createFileAtPath:documentLibraryFolderPath
contents:mainBundleFile
attributes:nil];
}
// 获取数据库 , 用的FMDB
_dataBase = [FMDatabase databaseWithPath:documentLibraryFolderPath];