我在我的应用程序中使用 Core Data 来实现持久性。除此之外,我正在使用自定义迁移并创建一个新的 sqlite 文件。我在 app 版本 1 中将我的 sqlite 文件命名为project.sqlite,在自定义迁移之后,我将新的 sqlite 文件命名为projectNew.sqlite。自定义数据迁移后,我删除了旧的 sqlite 文件并用旧名称重命名新的 sqlite 文件,即删除project.sqlite并将projectNew.sqlite重命名为project.sqlite
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeUrl
options:options
error:&error])
{
DLog(@"%@",error);
}
else
{
NSString* newDBfile = [storePath stringByAppendingPathComponent:@"projectNew.sqlite"];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:newDBfile];
if (fileExists) {
NSString* oldDBfile = [storePath stringByAppendingPathComponent:@"project.sqlite"];
if ([fileManager removeItemAtPath:oldDBfile error:&error] != YES)
{
NSLog(@"Unable to delete file: %@", [error localizedDescription]);
}
NSString *newPath = [storePath stringByAppendingPathComponent:@"project.sqlite"];
// Attempt the move
if ([fileManager moveItemAtPath:newDBfile toPath:newPath error:&error] != YES)
{
NSLog(@"Unable to move file: %@", [error localizedDescription]);
}
if (![persistentStoreCoordinator setURL:[NSURL fileURLWithPath:newPath] forPersistentStore:[persistentStoreCoordinator persistentStoreForURL:storeUrl]])
{
DLog(@"Persistent store not changed");
}
}
即使没有调用setURL:forPersistentStore:
(我的代码的最后一行),整个过程也是成功的,我认为这是一个必要的步骤,因为我的数据库文件位置已经改变,但persistentStoreCoordinator 尚未更新。谁能告诉persistentStoreCoordinator 是如何自己更新的或者代码为什么工作的?