Автоматическая миграция Lightwieight для основных данных Проблема - PullRequest
0 голосов
/ 24 июля 2011

У меня проблема с использованием Автоматическая облегченная миграция Код в моем делегате приложения!

Я прочитал все документы Apple о «Автоматическая облегченная миграция» , но в конце концов я не могу найти способ использовать коды, подготовленные для Автоматической облегченной миграции.

Недавно я только что добавил несколько Attribute к Entity в моем data model, и я хочу сохранить свои старые данные.

мой код делегата приложения выглядит следующим образом:

- (NSPersistentStoreCoordinator *) persistentStoreCoordinator {


    if (__persistentStoreCoordinator) {
        return __persistentStoreCoordinator;
    }

    NSManagedObjectModel *mom = [self managedObjectModel];
    if (!mom) {
        NSLog(@"%@:%@ No model to generate a store from", [self class], NSStringFromSelector(_cmd));
        return nil;
    }

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSURL *applicationFilesDirectory = [self applicationFilesDirectory];
    NSError *error = nil;

    NSDictionary *properties = [applicationFilesDirectory resourceValuesForKeys:[NSArray arrayWithObject:NSURLIsDirectoryKey] error:&error];

    if (!properties) {
        BOOL ok = NO;
        if ([error code] == NSFileReadNoSuchFileError) {
            ok = [fileManager createDirectoryAtPath:[applicationFilesDirectory path] withIntermediateDirectories:YES attributes:nil error:&error];
        }
        if (!ok) {
            [[NSApplication sharedApplication] presentError:error];
            return nil;
        }
    }
    else {
        if ([[properties objectForKey:NSURLIsDirectoryKey] boolValue] != YES) {
            // Customize and localize this error.
            NSString *failureDescription = [NSString stringWithFormat:@"Expected a folder to store application data, found a file (%@).", [applicationFilesDirectory path]]; 

            NSMutableDictionary *dict = [NSMutableDictionary dictionary];
            [dict setValue:failureDescription forKey:NSLocalizedDescriptionKey];
            error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:101 userInfo:dict];

            [[NSApplication sharedApplication] presentError:error];
            return nil;
        }
    }

    NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"FinancingPro.storedata"];
    __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];
    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]) {
        [[NSApplication sharedApplication] presentError:error];
        [__persistentStoreCoordinator release], __persistentStoreCoordinator = nil;
        return nil;
    }

    return __persistentStoreCoordinator;

Теперь я не знаю, как изменить этот код для автоматической облегченной миграции!
Обратите внимание, что моя база данных НЕ SQLlite.

1 Ответ

2 голосов
/ 25 июля 2011

Вам необходимо установить словарь опций с помощью клавиши NSInferMappingModelAutomaticallyOption здесь:

if (![__persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]) {

Передав значение nil для options, вы указываете магазину игнорировать любую миграцию.

...