当您通过 Xcode 的“复制捆绑资源”将数据库包含到您的捆绑包中时,它是捆绑包的一部分,即您通过以下方式获得路径:
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"DataBase" ofType:@"sqlite"];
如果您想将其复制到您的 Documents 文件夹以便使用它,您可以通过以下方式获取 Documents 路径:
NSString *documentsFolder = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *documentsPath = [documentsFolder stringByAppendingPathComponent:@"DataBase.sqlite"];
因此,您可以检查 Documents 中是否存在,如果不存在,则从 bundle 复制到 Documents:
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:documentsPath]) {
NSError *error = nil;
BOOL success = [fileManager copyItemAtPath:bundlePath toPath:documentsPath error:&error];
NSAssert(success, @"%s: copyItemAtPath failed: %@", __FUNCTION__, error);
}
您现在可以在 Documents 文件夹中打开数据库(例如使用documentsPath
)。
现在,如果您曾经尝试在 Documents 中打开数据库而没有先从包中复制,那么该标准sqlite3_open
将创建一个空白数据库。因此,您可能希望从设备/模拟器中删除该应用程序,然后重新安装,以摆脱 Documents 中的空白数据库(否则上述逻辑,在 Documents 中测试数据库是否存在,将导致误报)。