我完成了我的App以进行距离计算。我会在复制之前更新我的数据库。 我做了一些测试,当我将我的数据库(DataBase.sqlite)移动到“Copy Bundle Ressources”并在我的设备上运行App时,我看不到我的数据。
看起来设备正在使用自己的同名数据库(DataBase.sqlite)。 (DataBase将在启动期间更新TableView)
我创建了一个AddButton来查看我是否可以从iPhone更新我的DataBase并且它可以工作。 我的意思是我关闭App并重新启动它,我可以看到AddButton创建的数据。
你有什么想法吗?
答案 0 :(得分:0)
当您通过Xcode的“复制捆绑资源”将数据库包含到您的捆绑包中时,它是捆绑包的一部分,即您通过以下途径获取路径:
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"DataBase" ofType:@"sqlite"];
如果要将其复制到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中数据库的存在,将导致误报)。