以前にサードパーティによって開発されたアプリを完全に書き直しました。彼らは CoreData に Magical Record を使用し、シミュレーターの /Library/Application Support/AppName/ フォルダーにある appname.sqlite ファイルを見つけました。
私はまだ CoreData を学習しており、Xcode の CoreData アプリ テンプレートを使用しています。私の sqlite は /Documents/ フォルダーにあります。移行を実行できるように、古いストアを開くようにコードにアドバイスしてもらえますか? ありがとうございました。
元のコード:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[MagicalRecordHelpers setupCoreDataStack];
.....
return YES;
}
マジカルレコード:
+ (void) setupCoreDataStack
{
NSManagedObjectContext *context = [NSManagedObjectContext MR_context];
[NSManagedObjectContext MR_setDefaultContext:context];
}
+ (void) MR_setDefaultContext:(NSManagedObjectContext *)moc
{
NSPersistentStoreCoordinator *coordinator = [NSPersistentStoreCoordinator MR_defaultStoreCoordinator];
if ([MagicalRecordHelpers isICloudEnabled])
{
[defaultManageObjectContext_ MR_stopObservingiCloudChangesInCoordinator:coordinator];
}
MR_RETAIN(moc);
MR_RELEASE(defaultManageObjectContext_);
defaultManageObjectContext_ = moc;
if ([MagicalRecordHelpers isICloudEnabled])
{
[defaultManageObjectContext_ MR_observeiCloudChangesInCoordinator:coordinator];
}
}
+ (NSPersistentStoreCoordinator *) MR_defaultStoreCoordinator
{
if (defaultCoordinator_ == nil && [MagicalRecordHelpers shouldAutoCreateDefaultPersistentStoreCoordinator])
{
[self MR_setDefaultStoreCoordinator:[self MR_newPersistentStoreCoordinator]];
}
return defaultCoordinator_;
}
+ (NSPersistentStoreCoordinator *) MR_newPersistentStoreCoordinator
{
NSPersistentStoreCoordinator *coordinator = [self MR_coordinatorWithSqliteStoreNamed:[MagicalRecordHelpers defaultStoreName]];
MR_RETAIN(coordinator);
return coordinator;
}
+ (NSString *) defaultStoreName;
{
NSString *defaultName = [[[NSBundle mainBundle] infoDictionary] valueForKey:(id)kCFBundleNameKey];
if (defaultName == nil)
{
defaultName = kMagicalRecordDefaultStoreFileName;
}
if (![defaultName hasSuffix:@"sqlite"])
{
defaultName = [defaultName stringByAppendingPathExtension:@"sqlite"];
}
return defaultName;
}
編集:
ファイルを追い越すコード:
- (void)migrateVersion1
{
NSURL *version1URL = [[[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"Bundlename/Bundlename.sqlite"];
NSManagedObjectModel *version1Model = [[NSManagedObjectModel alloc] initWithContentsOfURL:version1URL];
NSPersistentStoreCoordinator *version1PCS;
NSError *error = nil;
if (version1Model != nil) {
version1PCS = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:version1Model];
}
if (![version1PCS addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:version1URL options:nil error:&error]) {
// handle error
}
NSManagedObjectContext *version1Context;
if (version1PCS != nil) {
version1Context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[version1Context setPersistentStoreCoordinator:version1PCS];
}
// start parsing
}