2010-02-01 18 views
24

Por motivos de rendimiento, quiero configurar Atributo indexado en algunas de mis entidades. Creé una nueva versión del modelo de datos básicos para realizar los cambios. Core Data detecta los cambios y migra mi modelo a la nueva versión; sin embargo, NO SE GENERAN NÚMEROS.Agregar índice de datos básicos a ciertos atributos mediante migración

Si recreo la base de datos desde cero, los índices están allí. Comprobé con el navegador SQLite tanto en el iPhone como en el simulador. El problema solo ocurre si una base de datos en el formato anterior ya está allí.

¿Hay alguna forma de agregar manualmente los índices? Escribir algunos sql para eso? ¿O me estoy perdiendo algo? Ya hice algunas migraciones más críticas, no hay problemas allí. Pero esos índices faltantes me están molestando.

¡Gracias por tu ayuda!

+0

puedo sugerir que acepte la respuesta de Scott? Funciona y está limpio. –

+0

Claro, se olvidó por completo de eso. Gracias, Vincent y thx por la gran respuesta para Scott! – steipete

Respuesta

50

Tuve el mismo problema.

De acuerdo con la Core Data Model Versioning and Data Migration Programming Guide:

la perspectiva de datos básicos de control de versiones es que sólo está interesado en características del modelo que afectan persistencia.

Simplemente agregar un índice a una propiedad de modelo existente no desencadena automáticamente una migración ya que Core Data no ve sus dos esquemas de modelo como diferentes (un índice no afecta la persistencia).

Sin embargo, puede hacer que Core Data vea su modelo como cambiado al agregar un modificador de versión Hash a su atributo recién indexado. Esto activó una migración ligera para actualizar mis bases de datos existentes.

+0

Funciona, gracias, no era obvio para figurar :) –

+14

Fantástico. Lo resolvió para mí. Me estaba volviendo loco con lo lento que era el núcleo de datos y ¡los índices no parecían ayudar! Para cualquiera que no entienda exactamente lo que significa la solución anterior ... cree una nueva versión del modelo, haga clic en el atributo que desea agregar también, en el índice de marcación de ventana de propiedades, luego busque "modificador hash de versión" a continuación , solo ingresa cualquier cadena como "change1". La diferencia de velocidad es enorme –

+0

Una vez que haya agregado la indexación al atributo y haya ingresado un modificador hash de versión, ¿cómo puede verificar que los valores estén siendo indexados? – noRema

0

¿Qué estrategia de migración usó?

En XCode puede generar un modelo de asignación y ver los cambios que se producirán, incluida la indexación.

Sugiero simplemente añadiendo el modelo de asignación, verificando el índice se especifican los cambios, y hacer la migración de peso ligero automático:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,nil]; 
NSPersistentStore *migratedStore = [persistentStoreCoordinator addPersistentStoreWithType:nil configuration:nil URL:storeURL options:options error:&error]; 
migrationWasSuccessful = (migratedStore != nil); 

El coordinador almacén persistente detectará automáticamente el modelo de asignación, y lo utilizan para llevar a cabo la migración Parece que el modelo inferido en tiempo de ejecución no es sensible a la aplicación de índices a las propiedades de la entidad.

+0

olvidé mencionar que esas opciones ya estaban habilitadas en mis pruebas. No lo probé sin esos, sin embargo ... – steipete

Cuestiones relacionadas