init avec arguments

jannold2

Membre confirmé
11 Avril 2007
55
0
40
Bonjour
est il interdit de faire des méthodes init avec arguments en Cocoa ?

-(id) init:(Objet*) obj {
if (self = [super init])
monobj = [obj retain]
return self;
}

à chaque fois que je fais [[maclasse alloc] init:obj] on me dit "erreur, incompatible type for argument 1 of init", alors que obj est bien un Objet* !!!

ce n'est vraiment pas la première fois que ça m'arrive

j'ai fait une autre méthode, init_with:(Objet*) obj..... mais même erreur

y a t'il une contrainte de langage du genre "il FAUT écrire toujours [[ alloc] init] sans aucun argument et avec ces noms de méthode ???
merci
Thomas
 
Bloc de code:
@implementation my

- (id)initWithObject:(id)obj 
{
         return [self initWithObject:obj options:0];
}

- (id)initWithObject:(id)obj options:(NSInteger)options
{
         if ((self = [super init])) {
           _obj = [obj retain];
           _options = options;
         }
         return self;
 }

+ (id)myWithObject:(id)obj
{
     return [my myWithObject:obj options:0];
}

+ (id)myWithObject:(id)obj options:(NSInteger)options
{
// my ou [self class]
     return [[[my allocWithZone:[self zone]] initWithObject:obj options:options] autorelease];
}

@end
//est il interdit de faire des méthodes init avec arguments en whatever you want ?

oui, ta question concerne l'objective-C pas Cocoa, apprend objective-C et le C AVANT de faire du Cocoa
 
Merci pour vos réponses, mais il semblerait en fait que le problème était que je faisais "init_with:..." au lieu de initWith:...

l'underscore (_) n'a pas l'air d'être toléré dans les noms de fonctions en init

Et vu vos solutions, il semble effectivement qu'on n'a le droit de faire une méthode init avec des arguments... que si celle ci ne s'appelle pas 'init', non ??? :)
 
Si si, on a le droit de faire ce qu'on veut, avec des underscores, même appeler la méthode autrement.

Simplement, il existe des conventions en ObjC, et ces conventions sont:
- les méthodes d'initialisations s'appellent init…
- Les underscores sont à proscrire en général, et en particulier pour séparer les mots. On utilise la capitalisation pour cela.
- Et aussi, les noms de méthodes commencent par une minuscule.
- On nomme les arguments dans le nom de la méthode: ex. initWithFrame:, [NSColor colorWithCalibratedRed:green:blue:alpha:]

Il y en a d'autres, je crois qu'il existe une doc de Peupeul à ce sujet.