В моем приложении iOS5 у меня есть NSObject
States
класс, и я пытаюсь его инициировать:
states = [states init];
вот init
метод в States
:
- (id) init
{
if ((self = [super init]))
{
pickedGlasses = 0;
}
return self;
}
Но есть ошибка в строке states = [states init];
Приемник типа "Состояния", например, сообщение является предварительной декларацией
Что это означает? Что я делаю не так?
Ответы:
Это в основном означает, что вам нужно импортировать файл .h, содержащий декларацию состояний.
Однако в вашем коде много других проблем.
+alloc
него. Это не сработает[super init]
в-init
.@class
в заголовке, но никогда не импортировали класс.источник
.h
файл из-за проблемы с циклической ссылкой.NSObject
.FWIW, я получил эту ошибку, когда я внедрил основные данные в существующий проект. Оказалось, я забыл связать CoreData.h с моим проектом. Я уже добавил инфраструктуру CoreData в свой проект, но решил проблему, связавшись с инфраструктурой в моем предварительно скомпилированном заголовке, как это делают шаблоны Apple:
источник
Я получил такое сообщение, когда у меня было два файла, которые зависели друг от друга. Сложность в том, что вы получите циклическую ссылку, если просто попытаетесь импортировать друг друга (класс A импортирует класс B, класс B импортирует класс A) из их заголовочных файлов. Поэтому вместо этого поместите объявление forward (
@class A
) в заголовочный файл одного из классов (класса B). Тем не менее, при попытке использовать ивар класса A в реализации класса B возникает эта ошибка, просто добавление#import "A.h"
в файл .m класса B решило проблему для меня.источник
Я пытался использовать
@class "Myclass.h"
.Когда я изменил его
#import "Myclass.h"
, он работал нормально.источник
@class "Myclass.h"
совершенно неверно.@class Myclass
должен использоваться в заголовочном файле, где класс не может быть импортирован (из-за циклических ссылок, как, например, в случае с классом, определенным Swift в Objective-C), но#import "Myclass.h"
должен использоваться, если он может быть импортирован.Ты используешь
где, как вы должны использовать
Ваш метод инициализации должен быть таким
Теперь, наконец, когда вы собираетесь создать объект для класса States, вы должны сделать это следующим образом.
Я не говорю, что это лучший способ сделать это. Но это может помочь вам понять самое основное использование инициализации объектов.
источник
Если вы получаете эту ошибку при попытке использовать класс или метод Swift в Objective C : вы забыли один из двух шагов, определенных Apple на этой диаграмме:
Пример:
Ошибка отображается в вашем
Test.m
файле:Шаг 1: проверьте, что
Test.h
естьШаг 2: найдите
*-Swift.h
имя файла в настройках сборки (ищите Имя заголовка сгенерированного интерфейса Objective-C ). Имя будет что-то вродеMyModule-Swift.h
Шаг 3: проверьте, что
Test.m
импортирует вышеуказанный заголовокисточник
Проверьте, импортировали ли вы заголовочные файлы классов, которые выдают эту ошибку.
источник
Убедитесь, что прототип для вашего метода модуля находится в файле .h.
Поскольку вы вызываете метод выше в файле, чем определяете его, вы получаете это сообщение. В качестве альтернативы вы могли бы переставить ваши методы, чтобы в файле было меньше вызывающих, чем вызываемых ими методов.
источник
Есть два связанных сообщения об ошибках, которые могут сказать вам, что что-то не так с объявлениями и / или импортом.
Первый - это тот, на который вы ссылаетесь, который может быть сгенерирован, НЕ помещая #import в ваш .m (или .pch файл) при объявлении @class в вашем .h.
Второе, что вы можете увидеть, если у вас есть метод в вашем классе States, например:
после добавления #import это:
Если вы видите это, вам нужно проверить и объявить, объявили ли вы свой метод выхода из системы (в данном случае) в файле .h класса, который вы импортируете или пересылаете.
Так что в вашем случае вам понадобится:
в классе вашего штата .h, чтобы одна или обе из этих связанных ошибок исчезли.
источник