Question

Encore une autre C # / NET gars essayer d'apprendre Objective-C avec de grands rêves de faire des millions avec une application iPhone.)

Ok, je suis sûr que cette question vient de moi étant habitué statique langages typés, et je suis donc un moment difficile ajustement, mais voici ma question. Supposons que j'ai une classe appelée MyObect:

MyObject.h

@interface MyObject : NSObject
{

}

-(void)Foo;

@end

MyObject.m

#import "MyObject.h"
@implementation MyObject

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

@end

Maintenant, je suis en train de jouer avec un NSMutableArray de ces objets, donc dans mon principal je remplir un tableau de ces objets quelque chose comme ceci:

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

Rien de fantaisie. Maintenant, cependant, je tentais de sortir le premier du tableau, et appeler la méthode foo. Donc, voici où je suis en train de confondre. Je l'ai essayé ceci:

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

et que cela fonctionne, je reçois un avertissement de MyObject peut ne pas répondre à un message . Alors, je me suis dit, ok, laissez-moi jetai il:

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

et cela me donne aussi l'avertissement.

Je suppose que ma question est une question fondamentale quant à la façon de stocker des éléments dans une collection, et comment vous les retirez et conservez toujours le type de l'objet. Encore une fois, je viens d'un milieu .NET, alors peut-être ma pensée est fondamentalement imparfait, donc si quelqu'un peut me diriger dans la bonne direction, je l'apprécie grandement.

EDIT : Mon code d'origine a en fait avoir l'astérisque dans la distribution (sans elle, vous obtenez une erreur de compilation). Il montre encore l'avertissement si ...

Était-ce utile?

La solution

Cela ne devrait pas donner un avertissement, étant donné que vous incluez l'astérisque comme vous le décrivez dans un commentaire à une autre réponse. En fait, je pense que le casting est inutile -. Même la version sans le casting ne devrait pas donner un avertissement

Assurez-vous que le fichier d'en-tête MyObject.h est #imported au début du fichier dans lequel vous essayez d'appeler votre méthode. L'avertissement que vous obtenez est typique des cas où vous avez l'avant-déclarés une classe avec, mais non inclus @class MyObject l'en-tête avec #import "MyObject.h".

BTW, dans un Objective-C commence habituellement les noms de méthode par une lettre minuscule, comme en Java.

Autres conseils

Changez votre ligne de coulée à:

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

Le manque est le problème *.

OK, je me sens comme un crétin tout moment :( J'ai oublié d'ajouter la déclaration de méthode dans le fichier d'en-tête. Le fait que les deux vous avez gardé en soulignant que je dois assurer que je suis d'importer le fichier d'en-tête, fait me rends compte que cela. Merci tous les deux pour votre aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top