我的应用使用核心数据。我已经在模拟器中运行了应用程序,该模拟器已成功创建并填充了相应的sqlite文件。我现在想要将这个预先存在的sqlite文件放到一个实际的设备上,并成为我的应用程序的一部分。我已将模拟器生成的sqlite文件放在/ Library / Application Support / iPhone Simulator / 6.0 / Applications / identifier / Documents / myapp.sqlite中并将其拖入Xcode。这已经将它添加到我的应用程序包中,但没有添加到适当的目录中(结果是可以读取sqlite文件但不能写入)。
从阅读文件系统来看,我认为放置sqlite文件的最佳位置是在Application_Home / Library /下的自定义目录“Database”中。我似乎无法在Xcode中执行此操作,尽管搜索我无法弄清楚如何执行以下操作:
(1)在Application_Home / Library /中创建一个名为'Database'的子目录? (2)将sqlite文件传输到我新创建的“Database”目录?
非常感谢@ Daij-Djan的回答。
另一个问题:持久性存储协调器将使用sqlite文件的路径。现在,根据sqlite文件的大小,复制或移动可能需要一段时间。在持久性存储协调器尝试引用sqlite文件之前,如何确保@ Daij-Djan提供的示例代码已执行并完成?
感谢您提前提供任何帮助。
答案 0 :(得分:4)
模拟代码
在appDidFinishLaunching中......也许
dbpath = PATH_YOU_WANT
if(!file.exists_at:dbpath) {
copy(dbinbundle, dbpath);
}
在objC中: (内联写入,错别字错误的机会)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
NSString *lib = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *dbs = [lib stringByAppendingPathComponent:@"Database"];
NSString *file = [dbs stringByAppendingPathComponent:@"db.sqlite"];
if(![[NSFileManager defaultManager] fileExistsAtPath:file]) {
id dbInBundle = [[NSBundle mainBundle] pathForResource:@"db" ofType:@"sqlite"];
[[NSFileManager defaultManager] createDirectoryAtPath:dbs withIntermediateDirectories:YES attributes:nil error:nil];
[[NSFileManager defaultManager] copyItemAtPath:dbInBundle toPath:file error:nil];
}
....
}