¿Dónde están mis entidades de datos centrales?

Tengo un proyecto preexistente al que he agregado models Core Data. Agregué el dataframe de Core, agregué un model de datos con entidades y lo NSManagedObject en el objective de mi aplicación, junto con algunas classs de NSManagedObject generadas. Se comstack muy bien, y ahora me gustaría agregar algunas testings para las entidades que he creado. Siguiendo estas instrucciones , he configurado una class base de testing lógica con un método setUp como tal:

 - (void)setUp { model = [NSManagedObjectModel mergedModelFromBundles:nil]; NSLog(@"model: %@", model); coord = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; store = [coord addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:NULL]; ctx = [[NSManagedObjectContext alloc] init]; [ctx setPersistentStoreCoordinator:coord]; } 

Esto comstack y se crean todos los objects. ¡Sin embargo, el model no tiene entidades! La salida NSLog() tiene este aspecto:

 2011-10-29 23:56:58.941 otest[42682:3b03] model: (<NSManagedObjectModel: 0x19c6780>) isEditable 1, entities { }, fetch request templates { } 

Entonces, ¿dónde están mis entidades? He pinchado el package y tampoco .momd files .momd . ¿He perdido un paso crucial para que mis models se construyan?

Hice un poco de Duck Duck Going adicional y logré encontrar la información que necesitaba en esta respuesta . El resultado es que, debido a que un objective de testing no utiliza un package "principal", tengo que instanciar el package de testing. Entonces, en lugar de esta línea:

  model = [NSManagedObjectModel mergedModelFromBundles:nil]; 

Ahora tengo estas tres líneas:

  NSBundle *bundle = [NSBundle bundleWithIdentifier:@"com.example.LogicTests"]; NSURL *url = [bundle URLForResource:@"MyModels" withExtension:@"momd"]; model = [[NSManagedObjectModel alloc] initWithContentsOfURL:url]; 

El identificador de package proviene directamente de mi información de compilation objective, mientras que "MyModels" proviene de mi file de model de datos, que se denomina "MyModels.xcdatamodeld" e incluido en el package de la aplicación como "MyModels.momd". Y eso, por supuesto, contiene mis models.

Mira aquí. Estoy usando el código que se genera cuando crea un proyecto con CoreData. Espero que eso te ayude a resolver tus problemas:

pragma mark Core Data stack

 @property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel; @property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext; @property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; /** Returns the managed object context for the application. If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application. */ - (NSManagedObjectContext *) managedObjectContext { if (managedObjectContext != nil) { return managedObjectContext; } NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { managedObjectContext = [[NSManagedObjectContext alloc] init]; [managedObjectContext setPersistentStoreCoordinator: coordinator]; } return managedObjectContext; } /** Returns the managed object model for the application. If the model doesn't already exist, it is created by merging all of the models found in the application bundle. */ - (NSManagedObjectModel *)managedObjectModel { if (managedObjectModel != nil) { return managedObjectModel; } managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain]; return managedObjectModel; } /** Returns the persistent store coordinator for the application. If the coordinator doesn't already exist, it is created and the application's store added to it. */ - (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (persistentStoreCoordinator != nil) { return persistentStoreCoordinator; } NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"CoreDB.sqlite"]]; NSError *error = nil; persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { /* Replace this implementation with code to handle the error appropriately. abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button. Typical reasons for an error here include: * The persistent store is not accessible * The schema for the persistent store is incompatible with current managed object model Check the error message to determine what the actual problem was. */ NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } return persistentStoreCoordinator; }