先月書いたcoredataありの時のフィル共有の追加メモ。
前回書いた分へのリンク
前回の最後に書いていた「バージョンアップでファイル共有に対応する」部分についてとりあえず対応が出来た。
やった事は、ものすごく単純な方法で問題なさそうであった。
手順として、以下のようにした。
1.データベースファイルの保存場所が、共有される場所にあるかのチェック
2.ファイルがある場合には、別の場所にファイル移動
当たり前の事をしただけだった。
実際のソースは以下のようにした。
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *oldStoreURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Test.sqlite"];
NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationSupportDirectory] stringByAppendingPathComponent: @"Test.sqlite"]];
NSFileManager* fileManager = [NSFileManager defaultManager];
NSError *error = nil;
NSString *oldString = [oldStoreURL path];
NSString *newString = [storeURL path];
if([fileManager fileExistsAtPath:oldString])
{
if (![fileManager moveItemAtPath:oldString toPath:newString error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
NSString *oldString2 = [oldString stringByAppendingString:@"-shm"];
NSString *newString2 = [newString stringByAppendingString:@"-shm"];
if (![fileManager moveItemAtPath:oldString2 toPath:newString2 error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
oldString2 = [oldString stringByAppendingString:@"-wal"];
newString2 = [newString stringByAppendingString:@"-wal"];
if (![fileManager moveItemAtPath:oldString2 toPath:newString2 error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
「AppDelegate.m」を修正。
元々のファイルの保存先を指定して、ファイルの有無チェックを行い、ファイルがあった場合のみファイル移動を行う。
このとき、coredataのデータベースファイルの3つを全て移動対象にする。
たったこれだけの、単純な実装ですんでよかった。
[0回]
PR