iOS

时间:2016-08-05 15:30:17

标签: ios

我有一个iOS应用程序,它以我认为相当标准的方式定位其数据库,即:

+ (NSString *)dbPath
{
    NSArray *a =
        NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
                                            NSUserDomainMask, YES);

    NSString *dir = [a objectAtIndex:0];
    return [dir stringByAppendingPathComponent:[self dbFile]];
}

这里dbFile是一个只返回数据库文件名称的函数。

最近,用户抱怨该应用有时无法找到其数据库。有什么我做错了吗?我没有及时了解iOS的最新变化。

2 个答案:

答案 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)

现在我记得了。

应用商店评论员告诉我,我无法将数据库存储在我原本打算使用的目录中,因为其内容是从互联网上下载的。他当然错了,但当时我遇到了很多麻烦,所以我只是按要求将数据库移动到缓存区域。

这就是有时会被删除的原因。