mapeamento de propriedades não está associado corretamente. Por quê?
EDIT 1 Embora eu compreenda que, para esse cenário em particular (e outros similares), eu poderia usar o editor de mapeamento sozinho para migrar minha loja corretamente, para que os valores no armazenamento persistente não fiquem por aí, mas essa não é uma solução para o meu problema atual, mas apenas evita abordar a raiz do problema. Estou interessado em seguir minha política de migração personalizada, pois isso me dará muito controle durante o processo de migração, especialmente para cenários futuros em que a configuração de uma política de migração personalizada funcione para mim. Isso é para uma solução de longo prazo e não apenas para esse cenário.
Peço que você tente me ajudar a resolver a situação atual em vez de me desviar para uma migração leve ou me aconselhar a evitar o uso de uma política de migração. Obrigado.
Estou realmente ansioso para resolver isso e suas valiosas contribuições / idéias sobre o que eu poderia fazer para corrigir esse problema.
O que eu fiz: Eu tenho uma política de migração configurada para que os dados de origem possam ser copiados nos dados de destino deversion 1
do modelo principal paraversion 2
.
Esta é a política de migração:
- (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)sInstance entityMapping:(NSEntityMapping *)mapping manager:(NSMigrationManager *)manager error:(NSError **)error {
// Create the product managed object
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:[mapping destinationEntityName]
inManagedObjectContext:[manager destinationContext]];
NSString *productCode = [sInstance valueForKey:@"productCode"];
NSNumber *productPrice = [sInstance valueForKey:@"productPrice"];
[newObject setValue:productCode forKey:@"productCode"];
[newObject setValue:productPrice forKey:@"productPrice"];
//This is the field where the name has changed as well as the type.
[newObject setValue:[NSNumber numberWithBool:YES] forKey:@"productPriceNeedsUpdating"];
// Set up the association between the old source product and the new destination Product for the migration manager
[manager associateSourceInstance:sInstance withDestinationInstance:newObject forEntityMapping:mapping];
/*
A test statement to make sure the destination object contains the correct
values int he right properties:
Product description: <NSManagedObject: 0xb983780> (entity: Product; id: 0xb9837b0 <x-coredata:///Product/t97685A9D-09B4-475F-BDE3-BC9176454AEF6> ; data: {
productCode = 9999;
productPrice = "2.09";
productPriceNeedsUpdating = 1;
})
*/
// Set up the association between the old source product and the new destination Product for the migration manager
return YES;
}
Portanto, mesmo que as propriedades testadas mostrem os valores corretos no tempo de execução, os valores resultantes salvos no armazenamento de modelo de dados estão incorretos, conforme visto nas capturas instantâneas.
Aqui está uma comparação da versão 1 para a versão 2 do armazenamento de dados.
Versão 1: correta
para a versão 2: que agora está armazenando os valores incorretamente.
A produção esperada deve ter o preço do produto inserido noproductPrice
campo e não noProductPriceNeedsUpdating
campo que na verdade deve ter apenas valores booleanos. Alguém pode me ajudar a entender o que estou fazendo de errado ou explicar o que está acontecendo aqui?
ATUALIZAÇÃO 1 - Aqui estão meusentity mappings
:
Atualização 2 - 20 / ago / 2014 01:02 GMT
Quando eu removo o atributoProductPriceLastUpdated
do tipodate
da versão 1 e remova o atributoProductPriceNeedsUpdate
do tipoboolean
na versão 2, deixando apenas os dois atributos que correspondem na versão 1 e 2, tudo funciona. Mesmo que eu possa deixá-lo aqui e seguir em frente, não posso ignorar os usuários que estão atualmente usando a versão 1 do banco de dados, que tem esse sentidoProductPriceLastUpdated
atributo que eu preciso do tipo convertido em booleano e também tenho o nome alterado paraProductPriceNeedsUpdate
. É quando as coisas começam a ficar estranhas e os valores dos preços são mostrados noProductPriceNeedsUpdate
campo em vez doproductPrice
campo.
Espero que alguém possa resolver o problema original e me diga por que o mapeamento de propriedades entityMapping, ou mais, não está sendo salvo corretamente?
Atualização 3 - EntityMapping e propriedades:
Versão 1
Versão 2
Alguma ideia?