No meu aplicativo iOS5, tenho NSObject
States
classe e estou tentando iniciá-lo:
states = [states init];
aqui está o init
método em States
:
- (id) init
{
if ((self = [super init]))
{
pickedGlasses = 0;
}
return self;
}
Mas há erro na linha states = [states init];
tipo de receptor "Estados", por exemplo, mensagem é uma declaração de encaminhamento
O que isso significa? O que estou fazendo de errado?
iphone
ios
objective-c
forward-declaration
Sentinela
fonte
fonte
Respostas:
Isso significa basicamente que você precisa importar o arquivo .h que contém a declaração de Estados.
No entanto, há muitas outras coisas erradas no seu código.
+alloc
ele. Isso não vai funcionar[super init]
no-init
.@class
no cabeçalho, mas nunca importou a classe.fonte
.h
arquivo por causa de um problema de referência circular.NSObject
.FWIW, recebi esse erro quando estava implementando dados principais em um projeto existente. Acabei esquecendo de vincular CoreData.h ao meu projeto. Eu já havia adicionado a estrutura CoreData ao meu projeto, mas resolvi o problema vinculando-a à estrutura no meu cabeçalho pré-compilado, assim como os modelos da Apple:
fonte
Recebi esse tipo de mensagem quando tinha dois arquivos que dependiam um do outro. O mais complicado aqui é que você obterá uma referência circular se apenas tentar importar um ao outro (classe A importa classe B, classe B importa classe A) de seus arquivos de cabeçalho. Então, o que você faria é colocar uma
@class A
declaração forward ( ) em um dos arquivos de cabeçalho das classes (classes B). No entanto, ao tentar usar um ivar da classe A na implementação da classe B, esse mesmo erro surge, apenas adicionando um#import "A.h"
no arquivo .m da classe B corrigiu o problema para mim.fonte
Eu estava tentando usar
@class "Myclass.h"
.Quando mudei para
#import "Myclass.h"
, funcionou bem.fonte
@class "Myclass.h"
está completamente incorreta.@class Myclass
deve ser usado em um arquivo de cabeçalho em que a classe não pode ser importada (devido à referência circular, como ocorreria com uma classe definida por Swift no Objective-C), mas#import "Myclass.h"
deve ser usada se puder ser importada.Você está usando
onde você deve usar
Seu método init deve ser assim
Agora, finalmente, quando você criar um objeto para a classe States, faça-o assim.
Não estou dizendo que essa é a melhor maneira de fazer isso. Mas isso pode ajudá-lo a entender o uso muito básico de inicializar objetos.
fonte
Se você estiver recebendo esse erro ao tentar usar a classe ou o método Swift no Objetivo C : esqueceu uma das 2 etapas definidas pela Apple neste diagrama:
Exemplo:
O erro aparece no seu
Test.m
arquivo:Etapa 1: verifique se
Test.h
háEtapa 2: encontre
*-Swift.h
o nome do arquivo em Configurações de compilação (procure pelo Nome do cabeçalho da interface gerada pelo Objective-C ). Nome será algo comoMyModule-Swift.h
Etapa 3: verifique se
Test.m
importa o cabeçalho acimafonte
Verifique se você importou os arquivos de cabeçalho das classes que estão lançando esse erro.
fonte
Verifique se o protótipo para o método da sua unidade está no arquivo .h.
Como você está chamando o método mais alto no arquivo do que o definido, você recebe esta mensagem. Como alternativa, você pode reorganizar seus métodos, para que os chamadores sejam mais baixos no arquivo do que os métodos que chamam.
fonte
Há duas mensagens de erro relacionadas que podem indicar que algo está errado com as declarações e / ou importações.
O primeiro é aquele a que você está se referindo, que pode ser gerado NÃO colocando uma # importação no seu arquivo .m (ou .pch) ao declarar uma classe @ no seu .h.
O segundo você pode ver, se você tivesse um método em sua classe States como:
depois de adicionar o #import é o seguinte:
Se você vir isso, verifique se declarou o método "logout" (neste caso) no arquivo .h da classe que está importando ou encaminhando.
Portanto, no seu caso, você precisaria de:
nas classes .h da sua classe de Estados para fazer com que um ou ambos esses erros relacionados desapareçam.
fonte