iOS: ошибка основных данных: NSMergeConflict для NSManagedObject - PullRequest
3 голосов
/ 17 ноября 2010

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

Ошибка: NSMergeConflict (0x76ae720) for NSManagedObject (0xd945560) with objectID '0xd943550 <x-coredata://09A438A8-E3F5-45FE-B9D7-106798E82E18/Article/p91>' with oldVersion = 1 and newVersion = 2

Код:

NSMutableDictionary *dict   = [[data objectAtIndex:i] valueForKey:@"category_names"];
        NSMutableArray      *values = [[NSMutableArray alloc] init];
        for (NSString *value in [dict allValues]) {
            NSLog(@"value = %@", value);
            [values addObject:value];
        }

        NSMutableSet *setElements = [[NSMutableSet alloc] init];
        for (int i = 0; i < [values count]; i++) {
            Category *cat = [self getCategoryFor:[values objectAtIndex:i]]; // Function which has fetch to get the category for the value "name"
            [setElements addObject:cat];
        }

        if ([setElements count] > 0) 
            [article addCategories:setElements];


        // Save the context.
        NSError* error;
        if (![managedObjectContext save:&error]) {
            NSLog(@"Failed to save to data store: %@", [error localizedDescription]);
            NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey];
            if(detailedErrors != nil && [detailedErrors count] > 0) {
                for(NSError* detailedError in detailedErrors) {
                    NSLog(@"  DetailedError: %@", [detailedError userInfo]);
                }
            } else
                NSLog(@"  %@", [error userInfo]);
        }

        [article release];
        [values release];
        [setElements release];

1 Ответ

4 голосов
/ 18 ноября 2010

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

Вы, должно быть, создали модель данных, использовали ее для записи некоторых данных в постоянное хранилище, а затем обновили модель.Обычно это не проблема, если вы не измените модель данных так, чтобы автоматическая миграция не могла объединить старые и новые данные.

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

...