0

Я только что выпустил приложение под названием Twinstones три дня назад, и я постоянно его обновлял, однако теперь я хочу обновить объект модели Core Data , Когда пользователи сначала открывают приложение (и в основном каждый раз после него), я использую объект NSUserDefaults для проверки того, была ли начата первоначальная настройка моего объекта модели. Если значением объекта по умолчанию является 0, он инициализирует установку, если 1, он игнорирует настройку.Как реализовать перенос основных данных для нового объекта для существующего приложения (если это необходимо)

На данный момент, очевидно, начальные настройки были завершены для всех 70-некоторых людей, которые загрузили игру.

Я хотел бы добавить Entity для учебника для первого уровня и использовать Core Data, чтобы отслеживать, было ли просмотрено учебное пособие, а это значит, что мне нужно перенести объект старой модели на этот новый с новым объектом. Прежде чем я войду в него, должен ли я использовать другой объект NSUserDefault (применяемый так же, как и первоначальная настройка), чтобы определить, следует ли запускать учебник на первом уровне?

Если нет, то вот мой код для контекста управляемого объекта, управляемая объектная модель и координатор настойчивого магазина:

- (NSManagedObjectContext *)managedObjectContext 
{ 
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
     [_managedObjectContext setPersistentStoreCoordinator:coordinator]; 
    } 
    return _managedObjectContext; 
} 

// from website 
- (NSManagedObjectModel *)managedObjectModel 
{ 
    if (_managedObjectModel != nil) { 
     return _managedObjectModel; 
    } 
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"ScoreModel" withExtension:@"momd"]; 
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 
    return _managedObjectModel; 
} 

// from website 
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 
    if (_persistentStoreCoordinator != nil) { 
     return _persistentStoreCoordinator; 
    } 
    NSURL *storeURL = [[self applicationDocumentsDirectory] 
        URLByAppendingPathComponent:@"Twinstones.sqlite"]; 
    NSError *error = nil; 
    _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; 
} 

В моем persistantStoreCoordinator метода, как бы я осуществить миграцию? Учитывая тот факт, что объект по умолчанию уже прошел инициализацию, мне кажется, что мне нужно добавить еще один объект по умолчанию, получить ссылку на текущий объект модели, перенести его и добавить новый Entity.

Я никогда не делал этого раньше, чтобы действительно вставить код в код (если, опять же, эта миграция даже необходима). Если я могу просто использовать другой объект NSUserDefaults с почти гарантией того, что список свойств, в котором он хранит данные, никогда не станет вредоносным, тогда я это сделаю.

ответ

0

использовать следующий словарь:

NSDictionary* configuration = @{ 
         NSMigratePersistentStoresAutomaticallyOption : @YES, 
         NSInferMappingModelAutomaticallyOption:@YES 
         }; 

Для вашего варианта конфигурации при добавлении в магазин к persistentStoreCoordinator.