Pergunta

No entanto, um outro cara C # / NET tentando aprender Objective-C com grandes sonhos de fazer milhões com um aplicativo para iPhone:.)

Ok, eu tenho certeza que esta questão decorre de me ser tão acostumados a linguagens estáticas digitado e, portanto, estou tendo um ajuste momento difícil, mas aqui está o meu problema. Vamos supor que eu tenho uma classe chamada MyObect:

MyObject.h

@interface MyObject : NSObject
{

}

-(void)Foo;

@end

MyObject.m

#import "MyObject.h"
@implementation MyObject

-(void)Foo
{
  //do something fooey
}

@end

Agora eu estou tentando mexer com um NSMutableArray desses objetos, por isso, a minha principal preenchimento I uma matriz desses objetos algo como isto:

NSMutableArray *array = [[NSMutableArray alloc] init];
for(int i = 0; i<10;i++)
{
   MyObject *obj = [[MyObject alloc]init];
   [array addObject:obj];
}

fantasia Nada. Agora, porém, eu estava tentando retirar o primeiro da matriz, e chamar o método foo. Então, aqui é onde eu estou ficando confuso. Eu tentei isso:

MyObject *obj = [array objectAtIndex:1];
[obj Foo];

e, enquanto isso funciona, eu recebo um aviso de MyObject não pode responder a mensagem . Então, eu pensei, ok, deixe-me lançá-lo:

MyObject *obj = (MyObject *)[array objectAtIndex:1];
[obj Foo];

e que também me dá o aviso.

Eu acho que a minha pergunta é uma questão fundamental de como você armazenar itens em uma coleção, e como você retirá-los e ainda manter o tipo do objeto. Mais uma vez, estou vindo de um fundo .NET, talvez por isso o meu pensamento é fundamentalmente falho, então se alguém pode me apontar na direção certa, eu agradeceria muito.

Editar : Meu código original de fato tem o asterisco no elenco (sem ele você recebe um erro de compilação). Ele ainda mostra o aviso embora ...

Foi útil?

Solução

Isto não deve dar uma advertência, uma vez que você incluir o asterisco como você descreve em um comentário para outra resposta. Na verdade, acho que o elenco é desnecessário -. Mesmo a versão sem o elenco não deve dar uma advertência

Certifique-se de que o MyObject.h arquivo de cabeçalho é #imported no início do arquivo onde você está tentando chamar seu método. O aviso de que você recebe é típico de casos em que você tem para a frente-declarados uma classe com @class MyObject mas não incluídas no cabeçalho com #import "MyObject.h".

BTW, em Objective-C normalmente se inicia nomes de métodos com uma letra minúscula, como em Java.

Outras dicas

Mude sua linha de fundição para:

MyObject *obj = (MyObject *)[array objectAtIndex:1];

O * falta é o problema.

OK, eu me sinto como um idiota total de agora :( Eu esqueci de adicionar a declaração de método para o arquivo de cabeçalho. O fato de que ambos mantiveram sublinhando que eu preciso ter certeza que estou importando o arquivo de cabeçalho, feita me perceber isso. Graças tanto de você por sua ajuda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top