it-swarm.com.ru

Тип получателя - прямое объявление

У меня есть этот код (вместе с другими вещами):

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

Эти строки дают мне ошибки, что сообщение class является предварительным объявлением:

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

Что это и как мне это исправить?

17
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.

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

2
Rudolf J

Меняю файл DDXML.h и работаю.

Файл: 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