使用OCUnit中的核心数据类的Apple Mach-O链接器错误

好的,这是我的测试类中的代码:

- (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; } 

这是尝试在测试方法中使用该方法时的失败消息:

 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) 

我以为我在.h文件中导入了所需的类:

 #import  

我错过了什么?

根据我的经验,i386错误往往来自缺少的库。 仅仅#import它们在你的文件中是不够的,你还必须将它们添加到项目库中。 进入项目目标 – >构建阶段 – >使用库链接二进制文件,并在您的情况下添加与Core Data关联的库。

您可能没有将库链接到目标。

在此处输入图像描述

摘自:http: //yannickloriot.com/wp-content/uploads/2012/03/Link-CoreData-Framework-To-The-Project.png

将“无公共块”从“是”更改为“否”(在“目标 – >构建设置 – > Apple LLVM – 代码生成”下)修复了该问题。 这解决了我的问题。 希望它对你有所帮助。