我有一个iOS应用程序,它以我认为相当标准的方式定位其数据库,即:
+ (NSString *)dbPath
{
NSArray *a =
NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask, YES);
NSString *dir = [a objectAtIndex:0];
return [dir stringByAppendingPathComponent:[self dbFile]];
}
这里dbFile是一个只返回数据库文件名称的函数。
最近,用户抱怨该应用有时无法找到其数据库。有什么我做错了吗?我没有及时了解iOS的最新变化。
答案 0 :(得分:0)
我还在当前项目的缓存中保存数据库。每当用户运行应用程序时,它都会正确找到数据库。主要用于FMDB。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *documentsDirectory = [documentsDir stringByAppendingPathComponent:strFileName];
if (![[NSFileManager defaultManager] fileExistsAtPath:documentsDirectory])
{
NSString *backupDbPath = [[NSBundle mainBundle] pathForResource:@"DBName" ofType:@"sqlite"];
NSLog(@"Test backuppath %@",backupDbPath);
if (backupDbPath == nil)
{
NSLog(@"Database path is nil");
}
else
{
BOOL copiedBackupDb = [[NSFileManager defaultManager] copyItemAtPath:backupDbPath toPath:documentsDirectory error:nil];
if (!copiedBackupDb) NSLog(@"Copying database failed");
}
}
答案 1 :(得分:0)
现在我记得了。
应用商店评论员告诉我,我无法将数据库存储在我原本打算使用的目录中,因为其内容是从互联网上下载的。他当然错了,但当时我遇到了很多麻烦,所以我只是按要求将数据库移动到缓存区域。
这就是有时会被删除的原因。