0

アプリの永続化に Core Data を使用しています。その上で、カスタム マイグレーションを使用し、新しい sqlite ファイルを作成しています。アプリのバージョン 1 でsqlite ファイルにproject.sqliteという名前を付けていましたが、カスタム移行後、新しい sqlite ファイルにprojectNew.sqliteという名前を付けました。データのカスタム移行後、古い sqlite ファイルを削除し、新しい sqlite ファイルの名前を古い名前に変更します。つまり、project.sqlite を削除、 projectNew.sqliteproject.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:、DB ファイルの場所が変更されたが、persistentStoreCoordinator がまだ更新されていないため、必要な手順であると思われる (コードの最後の行) を呼び出さなくても成功します。persistentStoreCoordinator 自体がどのように更新されているか、またはコードが機能している理由を誰か教えてもらえますか?

4

1 に答える 1