Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从swift viewcontroller的.c文件调用swift函数_Ios_Objective C_C_Swift_Pjsip - Fatal编程技术网

Ios 从swift viewcontroller的.c文件调用swift函数

Ios 从swift viewcontroller的.c文件调用swift函数,ios,objective-c,c,swift,pjsip,Ios,Objective C,C,Swift,Pjsip,我正在用IOS打电话。该项目正在进行中。我使用PJSIP作为第三方库进行调用,并使用Asterisk作为Voip服务器。我已经设置了服务器,并且在我的项目中集成了PJSIP。我可以注册到服务器,拨打电话,接听电话。当我接到显示用户id和其他信息的呼叫时,我想初始化一个新的ViewController。接收调用方法是用C语言实现的 /* Callback called by the library upon receiving incoming call */ static void on_in

我正在用IOS打电话。该项目正在进行中。我使用PJSIP作为第三方库进行调用,并使用Asterisk作为Voip服务器。我已经设置了服务器,并且在我的项目中集成了PJSIP。我可以注册到服务器,拨打电话,接听电话。当我接到显示用户id和其他信息的呼叫时,我想初始化一个新的ViewController。接收调用方法是用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.
}
我已经阅读了一些问题,为了调用swift函数是通过目标c。为了使事情更简单,我计划使用NSNotification of 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"
#ifndef应用程序(桥接)标题(h)
#定义应用程序桥接头
#endif/*应用程序桥接头*/
#进口
#导入“XCPjsua.h”
#导入“可达性.h”
#导入“ClearLocalSipManager.h”
#导入“testClass.h”

不能从C文件调用Objective-C(或Swift)

您可以将C文件的扩展名更改为.m,然后自由地混合使用C和Objective-C语法

如果不可能,则可以创建一个新的.m文件,其中包含Objective-C方法和C“shim”函数。垫片函数有一个C接口,但可以包含Objective-C代码,因为它们是在.m文件中定义的


创建一个只定义C shim函数的.h文件,而不是任何Objective-C。然后#将该.h文件包含在.C文件中。

正如Duncan回答的那样,是否可以将.C文件的扩展名更改为.m文件。如果其他人试图在swift项目中实现PJSIP,请确保将c文件更改为目标文件。通过桥接文件objective c可以轻松地将数据传递给swift。你可以做任何可能的手术

是的,它实际上可以更改为.m文件。这是否意味着目标c和c有相同的编译器?我从未使用过objective c,我对swift也有一点经验。是的,.m是objective-c的扩展。objective-c是c的“真正超集”,所以所有c代码也是有效的objective-c代码。您好,您有任何例子可以在github中实现吗?