2012-07-03 19 views
5

OK, đây là mã của tôi trong lớp học thử nghiệm của tôi:của Apple Mach-O Linker Lỗi sử dụng các lớp Core Data trong 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; 
} 

Và đây là những thông báo lỗi khi cố gắng sử dụng phương pháp này trong một phương pháp thử nghiệm:

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) 

tôi nghĩ rằng tôi nhập khẩu các lớp cần thiết như thế trong file .h:

#import <CoreData/CoreData.h> 

tôi thiếu gì?

Trả lời

15

Theo kinh nghiệm của tôi lỗi i386 có xu hướng đến từ các thư viện thiếu. Không đủ để chỉ #import chúng trong tệp của bạn, bạn cũng phải thêm chúng vào thư viện dự án. Đi vào mục tiêu dự án -> Xây dựng giai đoạn -> Liên kết nhị phân với thư viện và trong trường hợp của bạn thêm các thư viện liên kết với dữ liệu lõi.

+3

Aaaaaaaaah, tôi không biết rằng tôi phải liên kết CoreData hai lần - trước tiên đến mục tiêu xây dựng bình thường VÀ thứ hai cho mục tiêu xây dựng thử nghiệm. Điều đó giải quyết được vấn đề của tôi, nhờ cả hai! – CGee

0

Thay đổi 'Không có khối chung' từ Có thành Không (trong mục tiêu-> Cài đặt xây dựng-> Apple LLVM - Tạo mã) đã khắc phục sự cố. Điều này đã khắc phục được sự cố của tôi. Hy vọng nó sẽ giúp bạn.

Các vấn đề liên quan