web-dev-qa-db-ja.com

レシーバータイプは前方宣言です

私は(他のものと一緒に)このコードを持っています:

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

これは何ですか、どうすれば修正できますか?

18
cdub

CoreData/CoreData.hをSupporting Files/YourApp-Prefix.pchファイルにインポートする必要があります。

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

前方宣言とは、@Classによってクラスを宣言する必要があることを意味します。クラスを.h/.mファイルにインポートし、問題が解決することを期待してください。

11
Jamal Zafar

これを.hまたは.mファイルの先頭に追加します

#import <CoreData/CoreData.h>
5
Yup.

Swiftクラスを使用するObjective Cクラスの#import "Project-Name-Swift.h"ファイルをインポートすることで問題を解決しました。

2
Rudolf J

ファイルDDXML.hとWorkを変更します。

ファイル:DDXML.h

変化する:

#if TARGET_OS_IPHONE && 0 // Disabled by default

に:

#if TARGET_OS_IPHONE && 1 // Disabled by default
0
Oseias gomes

これは、クラスの名前を変更し、ヘッダーファイルの@class myclassを更新するのを忘れた後、よく起こります(コンパイルエラーはスローされません)。

0
Ed Filowat