2011-12-27 1 views
1

Мы используем основные данные для нашего онлайн-каталога, а его работа прекрасна и приложение доступно в магазине приложений. Теперь мне нужно обновить базовую дату некоторыми из полей и атрибутов. Он перенесен на новый, но старые данные, уже сохраненные в приложении, полностью исчезли. Я пробовал различные способы сохранить его с помощью этого кодаПередача основных данных xcode 4.2 не обновляет данные для приложения, уже доступного в магазине приложений

NSString *databaseFilePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"App_iOS.sqlite"]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    [fileManager removeItemAtPath:databaseFilePath error:NULL]; 

    NSURL *storeUrl = [NSURL fileURLWithPath: databaseFilePath]; 

    NSError *error = nil; 
    if(![[self persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration: nil URL:storeUrl options:nil error:&error]) 
    { 
     [__managedObjectContext insertObjects]; 
    } 
    else 
    { 
     [__managedObjectContext updatedObjects]; 
    } 

Я еще не получил решение сохранить данные в приложении. Я искал в Интернете для этого большинства лица ту же проблему, но я еще не получил хорошее решение.

+0

[ссылка] http://stackoverflow.com/questions/1018155/what-do-i-have-to-do-to-get-core-data-to-automatically-migrate-models Этот ответ очень полезен для достижения обновления основных данных. Спасибо за все!!! –

ответ

1

Я теперь обнаружил, что это довольно просто. - как только вы знаете, где искать # В моей AppDelegate я установленный вверх по NSPersistentStoreCoordinator - и вам необходимо добавить некоторые опции для этого, чтобы сказать ему, чтобы справиться авто-мигрирует:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 

    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 

    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

    NSError *error; 
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]]; 

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType  configuration:nil URL:storeUrl options:options error:&error]) { 
          // Handle error 
        NSLog(@"Problem with PersistentStoreCoordinator: %@",error); 
    } 

Тогда вам нужно сделать в Xcode:

1. Select your xcdatamodeld file 
2. Select the Editor Menu at the top - then choose Add Model Version 
3. Now your xcdatamodeld file have two (modelname.xcdatamodel & modelname2.xcdatamodel) . 
4. Now modelname.xcdatamodel have the green check mark implies it is current version, but we need to change the modelname2.xcdatamodel as a current version 
5. Select the xcdatamodeld file and then select the View Menu at the top - then Choose Utilities - then Choose the Show File Inspector is shown in right side of Xcode and then Select the Versioned Core Data Model - have Current(DropDownList) - select modelname2(the one you just made current version have green check mark). 
6. Now when you install this version onto a device that has the old model - it will automatically upgrade that model to the new model. 

Это кажется большим и так просто, как я хотел, - но я думаю, что нужно быть осторожным во время разработки, как вы изменить модель - иначе у вас будет t o создать новую версию для каждого изменения.

Я думаю, что я буду делать, так это то, что я сохраню все измененные файлы, а затем, когда я приступлю к развертыванию моего обновления, я удалю все промежуточные файлы и просто развернусь с самыми старыми и последними моделями.

0

Вам необходимо использовать технологию переноса данных. Я снова столкнулся с подобной задачей.
На этом есть учебник. Data migration.

Смежные вопросы