Agora descobri que isso é bastante simples - assim que você souber onde procurar.
Em meu AppDelegate, configurei o NSPersistentStoreCoordinator - e você precisa adicionar algumas opções a isso para instruí-lo a lidar com a migração automática:
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);
}
Então você precisa fazer um pequeno truque no xCode:
- Selecione seu arquivo xcdatamodel
- Selecione o Menu Design no topo - então Modelo de Dados - então escolha Adicionar Versão do Modelo
- Seu arquivo xcdatamodel será movido para um novo diretório com o mesmo nome de seu arquivo xcdatamodel, mas com a extensão xcdatamodeld - haverá um segundo arquivo neste diretório com um 2 no nome. Selecione o novo arquivo e, em seguida, Design-> Modelo de Dados-> Definir Versão Atual ( no Xcode 4 você faz isso )
- Se você já fez as alterações que tornaram seu projeto incompatível, retire essas alterações do arquivo xcdatamodel original. Se você ainda não fez as alterações - então apenas edite o arquivo 2.xcdatamodel (aquele que você acabou de criar na versão atual).
- Agora, quando você instalar esta versão em um dispositivo que tem o modelo antigo, ele fará upgrade automaticamente desse modelo para o novo modelo.
Isso parece ótimo e tão simples quanto eu queria - mas acho que você precisa ter cuidado durante o desenvolvimento ao alterar um modelo - caso contrário, você terá que criar uma nova versão para cada alteração.
Acho que o que farei é manter todos os arquivos alterados e, quando estiver pronto para implantar minha atualização, excluirei todos os arquivos intermediários e apenas implantarei com os modelos mais antigos e mais recentes.
ATUALIZAÇÃO (15/07/2011):
Obrigado a @ rockstarberlin por apontar que há documentação atualizada na apple:
Xcode 4: Definindo a versão atual de um modelo de objeto gerenciado
Atualização: 19/08/2013 melhor link:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmModelFormat.html