Méthodes de callback de C à Objective-C

J'ai une class Objective-C. Ce que je fais, c'est que j'appelle des fonctions C dans ma class objective-C [Cette C fonctions j'ai implémenté dans un file, qui fait partie de cet exemple de projet ios]. Toutes les fonctions C fonctionnent bien, jusqu'à présent, pas de problèmes.

Lorsque j'essaie d'appeler une fonction asynchronous dans le file C, ces fonctions donneront une réponse à la class objective-c après un certain time. J'ai appelé le pointeur de fonction dans C qui est déclenché correctement dans la class Objective-C. Veuillez vérifier l'extrait de code suivant. Je veux faire des actions liées à l'interface user sur la méthode de callback. Est-ce possible ? Si non, existe-t-il un autre moyen? Pourriez-vous s'il vous plaît me donner une réponse dès que possible. Merci.

Fichier C:

void my_int_func(int x); void test_asyn_fun () { /* This code is for Sleep logic */ for (int i=0; i<50000; i++) { // sleep } /* Sleep End */ void (*foo)(int); foo = &my_int_func; foo(25); } 

Fichier Objective-C:

 void my_int_func(int x) // this is call back method { printf( "%d\n", x ); // working properly [self anyMethodInMyClass]; // I am unable to use self in this function. } 

En fait, mon exigence est

J'ai le code C qui fera une fonctionnalité d'appel Voip. J'appelle les fonctions C de mon code objective-C [iOS]. Si l'appel a été déconnecté par le récepteur, une de mes fonctions C est appelée et arrête le process. Mais mon interface user affiche toujours l'interface user associée à l'appel. Je veux rejeter cela.

ici, Comment puis-je envoyer une notification à ma class objective-c à partir de la fonction C pour fermer l'UIView. Quelqu'un peut-il m'aider?

En fait, j'ai utilisé des pointeurs de fonction mais ça ne marche pas.

J'ai rencontré ce problème aussi. Je suppose que vous utilisez PJSIP pour votre application VoIP.

Ce que vous voulez faire est de créer un pointeur vers la class Objective-C à laquelle vous souhaitez envoyer des messages. Vous avez déjà pensé que vous ne pouvez pas appeler les fonctions Objective-C à partir de votre callback C.

static YourObjCClass *objCClassPtr

@property (nonatomic, retain) YourObjCClass *class

Lors de l'initialisation de cette class, faites pointer le pointeur statique sur le pointeur de l'object Objective C. (pointeur vers le pointeur vers l'object)

objCClassPtr = class;

Vous êtes maintenant en mesure d'envoyer des messages à l'object Objective-C en utilisant [objCClassPtr message] de votre fonction C comme si vous écrivez [class message]

Vous pouvez vous pointer de la même manière.

Tout d'abord merci à Ricardo Kloth, maintenant ça marche pour moi.

Voici mon code …

Code Objective-C:

 static id staticObject = nil; @Implementation MyObjCclass init { .... staticObject = self; } // C fun void functionPointer() { [staticObject message]; // it's working } -(void) message { } @end 

Vous pouvez utiliser des blocs. Les blocs sont disponibles en C et C ++ purs, un bloc est aussi toujours un object Objective-C.

Objets blocs C ++

Même dans les blocs, vous ne pouvez pas non plus accéder aux variables d'instance. Veuillez vérifier l'extrait de code suivant.

// c'est un code de bloc simple

NSSsortingng * (^ sortingmTheStr) (NSSsortingng *) = ^ (NSSsortingng * str) {

 [self myInstanceMethods]; // This will show error right NSSsortingng *result = nil; result = [str ssortingngByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; return result; 

}