2013-11-27 67 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

必须将该文件支持文件/ YourApp-Prefix.pch进口CoreData/CoreData.h:

#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

我更改文件DDXML.h和工作。

文件:DDXML.h

变化:

#if TARGET_OS_IPHONE && 0 // Disabled by default 

要:

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

我通过导入#进口 “项目,名称,Swift.h” 文件解决问题在使用Swift类的Objective C类中。

0

这重命名类,然后忘记更新@class在头文件MyClass的后经常发生在我身上(这显然不会抛出编译错误。)