2014-01-30 5 views
1

У нас очень сложная модель данных ядра с достаточным количеством данных, чтобы гарантировать множественные модели сопоставления. У нас возникают проблемы с пониманием требований к созданию отношений, которые охватывают модели сопоставления. Код ниже - наша последняя попытка, когда мы пытаемся найти связанный объект в контексте назначения и установить связь. Теперь мы понимаем, что нам не нужны конкретные типы объектов и имена отношений, но мы просто пытаемся заставить это работать в небольшом масштабе с одной сущностью, прежде чем мы займемся другими 300 отношениями. ПОМОГИТЕ!!! Маркус Зарра, где ты? У кого-нибудь есть предложение?Комплексная перенос данных ядра с несколькими схемами сопоставления

Link to picture of the Data Model

Код для создания отношений ...

- (BOOL)createRelationshipsForDestinationInstance:(NSManagedObject *)dInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error { 

if ([mapping.name isEqualToString:@"ProductImageToProductImage"]) { 

    [super createRelationshipsForDestinationInstance:dInstance entityMapping:mapping manager:manager error:error]; 

    NSArray *sources = [manager sourceInstancesForEntityMappingNamed:mapping.name destinationInstances:@[dInstance]]; 
    NSArray *destinations = [manager destinationInstancesForEntityMappingNamed:@"ProductImageToProductImage" sourceInstances:sources]; 

    NSManagedObject *sourceObj = [[sources objectAtIndex:0] valueForKey:@"product"]; 

    if (destinations.count == 1) { 

     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Product"]; 
     request.predicate = [NSPredicate predicateWithFormat:@"xID = %@",[sourceObj valueForKey:@"xID"]]; 
     ; 
     NSArray *result = [manager.destinationContext executeFetchRequest:request error:error]; 
     if (result.count > 0) { 
      Product *destProduct = (Product *)[result objectAtIndex:0]; 
      [dInstance setValue:destProduct forKey:@"product"]; 
     } 

    } else if (destinations.count > 1) { 
     NSLog(@"multiple products for %@",sources); 
    } 
} 

return YES; 

}

ответ

0

Мой совет должен был бы полностью отказаться от NSMappingModel и сделать ручной миграции. При слиянии или разделении объектов добавление новых данных по умолчанию et.c. Я всегда считаю, что это самый простой маршрут.

Чтобы выполнить миграцию вручную, вы выбираете каждый объект из исходного контекста в любом порядке, а затем создаете целевые объекты по мере необходимости. Это может быть довольно повторяющийся код, но вы можете быстро его записать и легко отладить.

0

Так вместо этого:

 BOOL ok = [migrationManager migrateStoreFromURL:sourceStoreURL 
               type:sourceStoreType 
              options:sourceStoreOptions 
            withMappingModel:mappingModel 
            toDestinationURL:destinationStoreURL 
            destinationType:destinationStoreType 
           destinationOptions:destinationStoreOptions 
               error:&error]; 

Я бы просто вручную извлечь из источника и вставить в место назначения, а затем создать все отношения все через методы Core Data, а затем добавить новый магазин в PSCoordinator используя новую модель?

+0

Хорошо, это немного поздно, но был ли это ответом на мой ответ? – Aderstedt

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