incompatible type for argument 3 of indirect function call"

elfelf Membre
18:33 modifié dans API AppKit #1
Hop j'ai reécrit tout le code de ma class qui bugais et ça marche...

Merci

prochain bug:

J'ai 2 classes une qui s'appelle iController et qui est mon conrôleur d'interface et une autre qui s'appelle Calculator et qui est la classe qui me fait mes calculs...

Ces 2 classes sont instanciées dans IB et dans la classe iController il y a un outlet calculator qui pointe vers ma classe Calculator

Des que j'utilise mon outlet dans le code par example comme ça:

<br />&nbsp; &nbsp; [displayField setFloatValue:[calculator getResult]];<br />


J'ai une erreur: "incompatible type for argument 3 of indirect function call"

Beuh??? :fouf): :why?: :(renaud): <3 :o :p >:) :brule: :)beta:

Réponses

  • fouffouf Membre
    18:33 modifié #2
    Quoi qu'elle te retourne getResult ? si c'est void, c'est normal qu'il y ait un pb.
  • elfelf Membre
    18:33 modifié #3
    getReslut revoye un float

    mais le problème est la avec tout les messages vers l'instatce IB de calculator
  • fouffouf Membre
    18:33 modifié #4
    Et comment tu déclares ton outlet ?
  • elfelf Membre
    18:33 modifié #5
    En code ça donne:

    @interface iController : NSObject<br />{<br />&nbsp; &nbsp; IBOutlet id calculator;<br />&nbsp; &nbsp; //...<br />}<br /><br />//...<br /><br />@end
    


    Dans IB j'ai:

    - Créer une instance des 2 classes
    - Fait les outlets et les action pour mon conrôleur d'interface dont un nommé "calculator"
    - Connecté l'outlet "calculator" a l'instance de ma classe "Calculator"
  • août 2005 modifié #6
    Ecoute je comprend pas ce que tu veux faire...
    Mais si tu veux appeler un autre nib qui a sa classe appelé "Calculator" il suffit ds ton header de la classe iController :

    <br />@class Calculator;<br />@interface iController : NSObject<br />{<br />Calculator *calculator;<br />}<br />@end
    

    et ds le fichier implementation de iController :

    <br />- (IBAction)showCalculatorMainWindow:(id)sender<br />{<br />if(!calculator){<br />calculator = [[Calculator alloc] init];<br />}<br />else{<br />[calculator showWindow:self];<br />}<br />}<br />
    


    J'ai compris que tu voulais envoyer une valeur à  calculator ? Alors rien de plus simple que les notifications !
    Oubli ce que je t'ai dit pour le header ds ce cas et passe directement au fichier d'implementation de iController.m:
    <br />- (IBAction)sendOperation:(id)sender<br />{<br />myFloatValue = [myTextField floatValue];<br />myOtherFloatValue = [myOtherTextField floatValue];<br />NSMutableDictionary *dico = [[NSMutableDictionary alloc] init];<br />[dico setObject:[NSNumber numberWithFloat:myFloatValue] forKey:@&quot;floatValue&quot;];<br />[dico setObject:[NSNumber numberWithFloat:myOtherFloatValue] forKey:@&quot;otherFloatValue&quot;];<br />[dico setObject:@&quot;+&quot; forKey:@&quot;operation&quot;];<br />[[NSNotificationCenter defaultCenter] postNotificationName:@&quot;SendOperation&quot; object:dico];<br />}<br />
    


    Maintenant notre classe Calculator.m :
    <br />- (id)init<br />{<br />self = [super init];<br />[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(calculate:) name:@&quot;SendOperation&quot; object:nil];<br />return self;<br />}<br /><br />- (void)calculate:(NSNotification *)notif<br />{<br />NSDictionary *dico = [notif object]; // dico de iController a été envoyé et <br />//en quelque sorte &quot;compressé&quot; (ouais jdis ça comme ça :p), donc on dit <br />//simplement à  la notif que dico est l&#39;objet qu&#39;on lui a envoyé afin de le <br />//récupérer.<br /><br />myFloatValue = [[dico objectForKey:@&quot;floatValue&quot;] floatValue];<br />myOtherFloatValue = [[dico objectForKey:@&quot;otherFloatValue&quot;] floatValue];<br /><br />if([[dico objectForKey:@&quot;operation&quot;] isEqualToString:@&quot;+&quot;]){ // bon ok ça <br />// c&#39;est débile mais bon c&#39;est un exemple <br />result = myFloatValue + myOtherFloatValue;<br />}<br />// après tu peux utiliser une notif pour envoyer le resultat vers iController.<br />}<br /><br />
    


    Point final
Connectez-vous ou Inscrivez-vous pour répondre.