2012-07-03 16 views
5

OK, aquí está mi código en mi clase de prueba:error de Apple Mach-O Enlazador el uso de clases de Datos Básicos en OCUnit

- (NSManagedObjectContext*)managedObjectContextWithConcurrencyType:(NSManagedObjectContextConcurrencyType)concurrencyType { 
    NSManagedObjectModel *mom = [NSManagedObjectModel mergedModelFromBundles:nil]; 
    STAssertNotNil(mom, @"Can not create MOM from main bundle"); 

    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; 
    STAssertNotNil(psc, @"Can not create persistent store coordinator"); 
    NSPersistentStore *store = [psc addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:0]; 
    STAssertNotNil(store, @"Can not create In-Memory persistent store"); 

    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:concurrencyType]; 
    moc.persistentStoreCoordinator = psc; 

    return moc; 
} 

Y aquí está el mensaje de error al intentar utilizar el método en un método de ensayo:

Undefined symbols for architecture i386: 
    "_NSInMemoryStoreType", referenced from: 
     -[CrosswordItemTests managedObjectContextWithConcurrencyType:] in CrosswordItemTests.o 
    "_OBJC_CLASS_$_NSEntityDescription", referenced from: 
     objc-class-ref in CrosswordItemTests.o 
     "_OBJC_CLASS_$_NSManagedObjectContext", referenced from: 
     objc-class-ref in CrosswordItemTests.o 
    "_OBJC_CLASS_$_NSManagedObjectModel", referenced from: 
     objc-class-ref in CrosswordItemTests.o 
    "_OBJC_CLASS_$_NSPersistentStoreCoordinator", referenced from: 
     objc-class-ref in CrosswordItemTests.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

pensé importé las clases necesarias como que en el archivo .h:

#import <CoreData/CoreData.h> 

¿Qué me falta?

Respuesta

15

En mi experiencia i386 errores tienden a provenir de las bibliotecas que faltan. No es suficiente para simplemente importarlos en su archivo, también debe agregarlos a las bibliotecas del proyecto. Vaya al Objetivo del proyecto -> Fases de compilación -> Enlace binario con bibliotecas y, en su caso, agregue las bibliotecas asociadas con los datos principales.

+3

Aaaaaaaaah, no sabía que tenía que vincular CoreData dos veces: primero al objetivo de compilación normal Y después del objetivo de compilación de prueba. ¡Eso resuelve mis problemas, gracias a ambos! – CGee

0

Al cambiar 'Sin bloques comunes' de Sí a No (en Objetivos -> Configuraciones de compilación -> LLVM de Apple - Generación de código) se arregló el problema. Esto solucionó mi problema. Espero que te ayude.

Cuestiones relacionadas