2015-11-27 1 views
3

Im делает приложение вызова в IOS. Проект идет быстро. Я использовал PJSIP в качестве библиотеки третьей части для совершения звонков и Asterisk в качестве сервера Voip. Я настроил сервер, также интегрировал PJSIP в свой проект. Я могу зарегистрироваться на сервер, позвонить, получить звонок. Я хочу инициализировать новый ViewController, когда я получаю вызов, показывающий идентификатор пользователя и другую информацию. Способ приема вызова осуществляется в C.вызывать быструю функцию из .c файла с оперативного управления представлением

/* Callback called by the library upon receiving incoming call */ 
static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, 
          pjsip_rx_data *rdata) 
{ 
    pjsua_call_info ci; 

    PJ_UNUSED_ARG(acc_id); 
    PJ_UNUSED_ARG(rdata); 

    pjsua_call_get_info(call_id, &ci); 

    PJ_LOG(3,(THIS_FILE, "Incoming call from %.*s!!", 
       (int)ci.remote_info.slen, 
       ci.remote_info.ptr)); 

    /* Automatically answer incoming calls with 200/OK */ 
    //pjsua_call_answer(call_id, 200, NULL, NULL); 
    //This is where i want to initize the viewcontroller and pass some data. 
} 

Я прочитал несколько вопросов и для того, чтобы вызвать быструю функцию через объективные с. Чтобы упростить работу с NSNotification Objective C, вы можете отправить уведомление и получить его в другом открытом Swift ViewController. Можно ли это сделать так? если да, это лучшая практика? Если мы согласны с моим решением, как я могу назвать объект c в файле .c? Это есть какое-то решение я прочитал:

Это мой файл мост

#ifndef App_Bridging_Header_h 
#define App_Bridging_Header_h 

#endif /* App_Bridging_Header_h */ 
#import <BWSip/BWSip.h> 
#import "XCPjsua.h" 
#import "Reachability.h" 
#import "ClearLocalSipManager.h" 
#import "testClass.h" 

ответ

4

Вы не можете позвонить Objective-C (или Swift) из файла C.

Вы можете изменить расширение своего файла C на .m, а затем свободно смешать синтаксис C и Objective-C.

Если это невозможно, вы можете создать новый .m-файл, содержащий оба метода Objective-C и C "shim". Функции прокладки имеют интерфейс C, но могут содержать код Objective-C, поскольку они определены в файле .m.

Создайте файл .h, который определяет только функции C-прокладки, а не Objective-C. Затем # включить этот файл .h в ваш .c файл.

+0

Да, это действительно может быть изменено на файл .m. Означает ли это, что объективные c и c имеют один и тот же компилятор? Я никогда не работал с объективным c, и у меня есть небольшой опыт по быстрому. –

+0

Да, .m - это расширение для Objective-C. Objective-C является «истинным надмножеством» C, поэтому все C-коды также действительны с кодом Objective-C. –

0

Как ответил Дункан, можно ли изменить расширение .c-файла на файл .m. Если кто-то пытается внедрить PJSIP в быстрый проект, обязательно измените файл c на объектный файл. Через объект Bridge файл c может легко передавать данные быстро. Чем вы можете сделать любую операцию.

+0

Привет, у вас есть пример того, как это можно сделать в github? – user12384512

 Смежные вопросы

  • Нет связанных вопросов^_^