Main Bundle の読み取り専用の Core Data sqlite を使用していますが、うまく機能します。データベースの新しいバージョン (より多くの読み取り専用データ) をメイン バンドルに追加すると、データベースの「古い」バージョンが読み取られます。
現在のユーザーがデータベースの新しいバージョンで更新をダウンロードするときに、新しいデータベースのバージョンを現在のバージョンにする理由と何をすべきかを理解するのに役立つ人はいますか?
これは、この投稿の問題を解決しようとする試みの一部です:ドキュメント ディレクトリから更新されたデータベースにアクセスするときの同じ問題
===解決策====
「新しい」メインバンドルの新しいデータベースの名前を変更することでこれを解決しましたが、夢のように機能します。また、これが更新の場合は、ドキュメント ディレクトリ内の古いデータベースを削除してクリーンアップします。
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
//===READ DATABASE FROM MAIN BUNDLE===//
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *storeUrl = [[NSBundle mainBundle] URLForResource:kNewDB withExtension:@"sqlite"];
//=== IF THE OLD DATABASE STILL EXIST DELETE IT FROM DOCUMENT DIRECTORY ===//
NSURL *oldDatabasePathURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"database.sqlite"];
NSString *oldDatabasePath = [oldDatabasePathURL path];
if ([fileManager fileExistsAtPath:oldDatabasePath]) {
//Remove old database from Documents Directory
[fileManager removeItemAtURL:oldDatabasePathURL error:nil];
}
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
NSError *error;
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
// Update to handle the error appropriately.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
exit(-1); // Fail
}
return persistentStoreCoordinator;
}