2013-11-27 2 views
17

У меня есть этот код (наряду с другими вещами):Тип приемника является опережающее объявление

- (NSManagedObjectContext *) managedObjectContext 
{ 
    assert([NSThread isMainThread]); 
    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 
    if (coordinator != nil) { 
     _managedObjectContext = [[NSManagedObjectContext alloc] init]; 
     [_managedObjectContext setPersistentStoreCoordinator: coordinator]; 
    } 

    return _managedObjectContext; 
} 

Эти строки дает мне ошибки, класс сообщений является опережающее объявление:

_managedObjectContext = [[NSManagedObjectContext alloc] init]; 
[_managedObjectContext setPersistentStoreCoordinator: coordinator]; 

Что это и как я могу это исправить?

+0

Я думаю, что вы забыли импортировать заголовочный файл который вы заявили как @class abcd – Tendulkar

ответ

37

Вы должны импортировать CoreData/CoreData.h в файле Поддержка файлов/YourApp-Prefix.pch:

#ifdef __OBJC__ 
    #import <UIKit/UIKit.h> 
    #import <Foundation/Foundation.h> 
    #import <CoreData/CoreData.h> 
#endif 
+3

Это глупо, но это работает. – wander

11

Переслать декларацию означает, что вы должны объявить класс @Class. Импортируйте класс в файл .h/.m и надейтесь, что он решит проблему.

4

Добавить это в верхней части .h или .m файл

#import <CoreData/CoreData.h> 
0

I Измените файл DDXML.h и Work.

Файл: DDXML.h

Изменение:

#if TARGET_OS_IPHONE && 0 // Disabled by default 

To:

#if TARGET_OS_IPHONE && 1 // Disabled by default 
2

Я решил проблему за счет импорта #import "Project-Name-Swift.h" файл в классе Objective C, который использует класс Swift.

0

Это часто случается со мной после переименования класса, а затем забыть обновить @class MyClass в заголовочном файле (который, очевидно, не будет бросать ошибку компиляции.)

Смежные вопросы