接收方类型是前向声明

时间:2013-11-27 09:40:38

标签: ios objective-c core-data ios7

我有这个代码(以及其他东西):

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

这是什么以及如何解决?

6 个答案:

答案 0 :(得分:37)

您必须在Supporting Files / YourApp-Prefix.pch文件中导入CoreData / CoreData.h:

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

答案 1 :(得分:11)

通过前进声明意味着您必须按@Class声明课程。导入.h / .m文件中的类,希望它能解决问题。

答案 2 :(得分:5)

将此添加到.h或.m文件的顶部

#import <CoreData/CoreData.h>

答案 3 :(得分:2)

我通过在使用Swift类的Objective C类中导入#import“Project-Name-Swift.h”文件解决了这个问题。

答案 4 :(得分:0)

我更改文件DDXML.h和Work。

文件:DDXML.h

变化:

#if TARGET_OS_IPHONE && 0 // Disabled by default

要:

#if TARGET_OS_IPHONE && 1 // Disabled by default

答案 5 :(得分:0)

在重命名一个类之后,经常发生这种情况,然后忘记在头文件中更新@class myclass(显然不会引发编译错误。)