过去,我发布的应用程序带有预加载的数据库,因此用户不必在第一次运行时更新它。我在另一个关于 SO 的问题中发现了一些代码(对不起,不再有链接),我添加到我的 App Delegate 的persistentStoreCoordinator
方法中:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"db.sqlite"];
if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path]])
{
NSURL *preloadURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"db" ofType:@"sqlite"]];
NSError* err = nil;
if (![[NSFileManager defaultManager] copyItemAtURL:preloadURL toURL:storeURL error:&err])
{
NSLog (@"Error - Could not preload database.");
}
}
//... more code generated from the template here
}
当我尝试在 iOS 7 中执行此操作时,我没有收到任何错误,但数据库是空的(即使我的数据库中mainBundle
有我期望的所有信息)。我注意到有更多的数据库文件(一个 .sqlite-shm 文件和一个 .sqlite-wal 文件)applicationDocumentsDirectory
。我还需要对这些文件做些什么吗?还是不再可能在应用程序中提供预加载的数据库?
编辑:我尝试添加代码来复制新的 .sqlite-shm 和 .sqlite-wal 文件,但这没有帮助。