initWith...

cyranocyrano Membre
bonjour,

rien de grave  :D

comment faites vous si vos classes ont la même signature pour l'initialisation? (et même si la signature n'est pas totalement identique, arguments différents)

ex

- (id)initWithString:(NSString *)aString; //qui doit être assez courante

le compilo ne lance:

warning: multiple methods named '-initWithString:' found

Réponses

  • BunoBuno Membre
    07:29 modifié #2
    Yop,
    Tu peux mettre un nom plus explicite, genre initWithLastname:, 'fin, ce que représente ta string, quoi  ;)
  • CeetixCeetix Membre
    07:29 modifié #3
    Il ne faut pas signaler que tu fais un override ?
    Enfiin ça dépends ce que tu veux faire. Redéfinir la méthode officelle NSString ou juste avec une méthode d'init normal pour un de tes objets.
  • cyranocyrano Membre
    décembre 2010 modifié #4
    @interface BC_Move:NSObject
    .../...

    - (id)initWithPosition:(int)square;

    @end

    et

    @interface BC_Game:NSObject
    .../...

    - (id)initWithPosition:(NSString *)stringBoard;

    @end



    certe pour BC_Move je peux mettre

    - (id)initWithLocation:(int)square;


    avouez que c'est balot  >:(
  • BunoBuno Membre
    07:29 modifié #5
    Je te propose ceci:


    initWithPositionFromInt et initWithPositionFromString
  • ClicCoolClicCool Membre
    07:29 modifié #6
    Sinon cette directive ne fonctionne pas ici ?
    GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO
    
  • cyranocyrano Membre
    07:29 modifié #7
    Sinon cette directive ne fonctionne pas ici ?


    j'essaierai, mais bon c'est limite je trouve.
  • ClicCoolClicCool Membre
    07:29 modifié #8
    Limite oui, surtout si, comme moi, tu as l'habitude du C++ ou les méthodes sont identifiées non seulement par leur nom mais aussi par le type de leur(s) argument(s).
    C'est un truc qui m'a perturbé un long moment, mais après on fini par trouver ça plus clair.
  • 07:29 modifié #9
    Le plus chiant c'est quand on a plusieurs classes qui utilisent un simple initWithDelegate:
    Ducoup je commence à  prendre l'habitude de rajouter le nom de la classe quelque part (ou un bout du nom), du genre "initTwitterEngineWithDelegate:"
  • ClicCoolClicCool Membre
    07:29 modifié #10
    Pourtant les FrameWorks d'Apple sont pleins de méthodes d'initialisation "identiques" pour des objets bien différents.
    Comme [tt]- (id)initWithContentsOfFile:(NSString *)path[/tt] qui est déclaré et défini par des classes comme NSArray, NSData, NSDictionnary, NSImage, NSString ...
    Et ça ne pose aucun problème à  priori ...  ???
  • cyranocyrano Membre
    07:29 modifié #11
    Pourtant les FrameWorks d'Apple sont pleins de méthodes d'initialisation "identiques" pour des objets bien différents.
    Comme - (id)initWithContentsOfFile:(NSString *)path qui est déclaré et défini par des classes comme NSArray, NSData, NSDictionnary, NSImage, NSString ...
    Et ça ne pose aucun problème à  priori ... 


    +1
  • jpimbertjpimbert Membre
    07:29 modifié #12
    Il n'y a pas de problème à  déclarer la "même" méthode dans plusieurs classes.
    Ici le souci vient du fait que ces mêmes méthodes sont déclarées dans des interfaces, et que vraisemblablement on utilise ces différentes interfaces sur les mêmes classes.
  • ClicCoolClicCool Membre
    07:29 modifié #13
    dans 1292058669:

    Ici le souci vient du fait que ces mêmes méthodes sont déclarées dans des interfaces, et que vraisemblablement on utilise ces différentes interfaces sur les mêmes classes.
    Déclarées dans des interfaces ?
    C'est à  dire ?  ???



    dans 1292058669:

    Il n'y a pas de problème à  déclarer la "même" méthode dans plusieurs classes.

    Oui, c'est même ce qui se passe chaque fois que, par exemple, on défini un protocole de NSObjet auquel plusieurs classes fort différentes se conforment.
  • AliGatorAliGator Membre, Modérateur
    07:29 modifié #14
    Je pense qu'il parlait "d'interfaces" au sens Java, ce qu'en Objective-C on appelle des @protocol
  • ClicCoolClicCool Membre
    07:29 modifié #15
    Ah, oui je vois !
    Merci Ali  :)

    Ca change tout en effet ici si 2 protocoles déclarent la même Méthode et qu'une classe adopte ces deux protocoles...
    Mais est-ce le cas ici ?
Connectez-vous ou Inscrivez-vous pour répondre.