IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

Appeler une méthode depuis une autre classe


Sujet :

Objective-C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Appeler une méthode depuis une autre classe
    Bonjour ,

    J'ai créé une socket , je voudrai que la méthode (ou il y a le code de la socket soit dans une classe) et que depuis la classe ViewController j'appelle la méthode socket pour qu'elle se lance.

    Donc j'ai créé une classe : CIMO2.h et CIMO2.m ; C'est la ou il y a le code de la socket :

    CIMO2.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    #import "ViewController.h"
     
    @interface CIMO2 : NSObject <NSStreamDelegate>
    {
        NSInputStream *inputStream;
        NSOutputStream *outputStream;
     
    }
     
    -(void)socket;
     
     
    @end
    CIMO2.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #import "CIMO2.h"
     
    @implementation CIMO2
     
    -(void)socket
    {
        CFReadStreamRef readStream;
        CFWriteStreamRef writeStream;
     
        CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost", 6, &readStream, &writeStream);
     
        inputStream = (__bridge NSInputStream *)readStream;
        outputStream = (__bridge NSOutputStream *)writeStream;
     
        [inputStream setDelegate:self];
        [outputStream setDelegate:self];
     
        [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
     
        [inputStream open];
        [outputStream open];
     
    }
     
    @end


    ViewController.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #import <UIKit/UIKit.h>
    #import "CIMO2.h"
     
    @interface ViewController : UIViewController
     
    {
     
    }
     
     
    @end
    ViewController.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #import "ViewController.h"
    #import "CIMO2.h"
    
    @class CIMO2;
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [CIMO2 socket]; //C'est la ou il y a l'erreur : No know class method for selector 'socket'
        
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    Si quelqu'un pourrait m'expliquer comment faire pour que ça marche vue que je comprend pas trop comment ça pourrait marcher ..

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 74
    Points
    74
    Par défaut
    il faut que tu initialise ta variable avant d'utiliser ta methode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CIMO2 *c = [[CIMO2 alloc] init];
     
    [c socket];

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse rapide !

    Du coup j'initialise la variable dans viewDidLoad ??

    EDIT: J'ai initialisé la variable , ça ne me met plus d'erreur mais du coup maintenant l'appli crash a son lancement

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 74
    Points
    74
    Par défaut
    Tu initialises ta variable la où tu veux l'utiliser, et si j'ai pas plus d'information sur le crash ça va être difficile pour moi ou pour les autres de t'aider.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Du coup j'ai initialiser la variable dans la méthode d'un bouton " connect " :

    ViewController.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    - (IBAction)connect:(id)sender
    {
        CIMO2 *c = [[CIMO2 alloc] init];
        [c socket];
    }
    Et du coup dès que je lance l'application et que j'appuie sur ce bouton elle crash et me renvoie sur le main.m

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(int argc, char * argv[])
    {
        @autoreleasepool {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));//Voici l'erreur : Thread 1: EXC_BAD_ACCESS (code=1, address = 0x40c04fe5)
            
            
        }
    }

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2012
    Messages : 57
    Points : 74
    Points
    74
    Par défaut
    Ajoute un breakpoint pour voir avec plus de précision l'erreur

    Debug -> Breakpoints -> Create exception Breakpoints

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    J'ai ajouté le breakpoint mais je vois pas ou on voit qu'il y a plus de précision ..

    C'est peut être ça se qu'on voit en bas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    argv = (char **)0xbfffee88
    *argv = (char *)	"/Users/luismac/Library/Application Support/iPhone Simulator/7.0.3/Applications/E0422068-EBF4-4ED8-928B-A49E98D0A771/classe.app/classe"	0xbfffeff4
         **argv =(char)'/'	
    argc = (int)1

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    J'ai réussi a résoudre mon problème dans " Build Settings " j'ai mis " No " à "Objective-C Automatic Reference Counting " et du coup j'ai plus le problème de crash !

  9. #9
    Modérateur

    Avatar de kOrt3x
    Homme Profil pro
    Technicien Informatique/Webmaster
    Inscrit en
    Septembre 2006
    Messages
    3 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Informatique/Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 650
    Points : 15 771
    Points
    15 771
    Par défaut
    Citation Envoyé par luisitoafk Voir le message
    J'ai réussi a résoudre mon problème dans " Build Settings " j'ai mis " No " à "Objective-C Automatic Reference Counting " et du coup j'ai plus le problème de crash !
    Un petit alors ?
    La rubrique Mac
    Les cours & tutoriels Mac
    Critiques de Livres Mac & iOS
    FAQ Mac & iOS

    ________________________________________________________________________
    QuickEvent : Prise de rendez-vous rapide pour iPhone/iPad et iPod Touch (AppStore)
    Mon Livre sur AppleScript : AppleScript: L'essentiel du langage et de ses applications

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour ,

    Non pas totalement résolu , la socket se connecte à l'aide du bouton connexion mais j'aimerai aussi pouvoir la déconnecter à l'aide du bouton déconnexion du coup comment appeler la méthode déconnecter ??

    ViewController.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    - (IBAction)connect:(id)sender
    {
        CIMO2 *c = [[CIMO2 alloc] init];
        [c connexion];
    }
    
    - (IBAction)deConnect:(id)sender
    {
        // ici je voudrais appeler la méthode ' déconnexion ' qui se trouve ci dessous dans la classe CIMO2.m
    }
    CIMO2.m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    -(void)deconnexion
    {
        [inputStream close];
        [outputStream close];
    }

  11. #11
    Rédacteur

    Homme Profil pro
    Expert iOS
    Inscrit en
    Juin 2005
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : Juin 2005
    Messages : 413
    Points : 1 619
    Points
    1 619
    Billets dans le blog
    1
    Par défaut
    Salut,

    Nan mais le problème là n'est pas une question de socket, de connexion ou de déconnexion. Le problème est que tu ne sais pas déclarer une variable membre d'une classe ni une propriété ni appeler des méthodes et donc que tu ne maitrise absolument pas ni les concepts de base de la programmation objet, ni le langage Objective-C. Il est flagrant que tu ne comprends pas le code que tu écris. Laisse tomber les sockets pour l'instant et reprends toutes les bases à zéro, tu te rendras service.

Discussions similaires

  1. Appel d'une methode depuis d'autre class
    Par giraud vias dans le forum C#
    Réponses: 3
    Dernier message: 28/12/2017, 14h17
  2. Appel d'une méthode depuis une autre classe
    Par anonymous123 dans le forum Général Java
    Réponses: 1
    Dernier message: 18/07/2012, 16h22
  3. Accès à une méthode d'une form depuis une autre autre form
    Par arngrimur dans le forum Windows Forms
    Réponses: 16
    Dernier message: 13/01/2012, 15h45
  4. Réponses: 2
    Dernier message: 01/12/2008, 18h43
  5. Réponses: 6
    Dernier message: 29/04/2008, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo