Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 创建一个在extern中定义的类;";块可以引用外部的方法_Ios_Methods_Mpmovieplayercontroller_Extern - Fatal编程技术网

Ios 创建一个在extern中定义的类;";块可以引用外部的方法

Ios 创建一个在extern中定义的类;";块可以引用外部的方法,ios,methods,mpmovieplayercontroller,extern,Ios,Methods,Mpmovieplayercontroller,Extern,我正在尝试为Unity3d iOS编写一个简单的插件,您可能已经听说过该视频流。事实上,我做到了,流媒体视频位工作正常 现在,我正尝试添加插件的一部分功能,以检测滑动手势并向Unity发送消息。我没有使用Objective C的经验,目前对学习细节不感兴趣,因为我只想找到解决这一特定问题的方法 因此,我设法在谷歌上搜索了流式传输实际视频所需的所有内容,以及一些用于注册刷卡手势的代码。但问题是,在定义UISweepGestureRecognitor时,您需要为其分配一个操作方法。但是做视频流的功能

我正在尝试为Unity3d iOS编写一个简单的插件,您可能已经听说过该视频流。事实上,我做到了,流媒体视频位工作正常

现在,我正尝试添加插件的一部分功能,以检测滑动手势并向Unity发送消息。我没有使用Objective C的经验,目前对学习细节不感兴趣,因为我只想找到解决这一特定问题的方法

因此,我设法在谷歌上搜索了流式传输实际视频所需的所有内容,以及一些用于注册刷卡手势的代码。但问题是,在定义UISweepGestureRecognitor时,您需要为其分配一个操作方法。但是做视频流的功能是在一个外部“C”块中定义的,这是必需的,以便可以统一引用它

虽然分配给手势识别器的方法必须在iOS应用程序的常规框架中定义(我认为),但我怀疑这会造成手势识别器类不知道在外部“C”块之外定义的方法的问题

所以现在当我运行它时,视频开始流,但一旦我开始滑动屏幕,它就会崩溃。我猜可能是因为分配的方法无法引用

我的问题是。。。我如何做到这一点,也许有一些明显的事情我不知道?重要的是让它在外部“C”块中定义的函数中工作,因为这毕竟是Unity所需要的

这是我到目前为止编写的实际代码:


您的问题是当您将其作为目标传递时,
滑动
未定义。谁知道当它通过时,堆栈上有什么?这会导致在您刷卡时将方法发送到内存中的错误位置

UISwipeGestureRecognizer * swipe = [[UISwipeGestureRecognizer alloc] 
initWithTarget:swipe action:@selector(loadLevel:)];
这相当于:

id undefinedTarget;
UISwipeGestureRecognizer * swipe = [[UISwipeGestureRecognizer alloc] 
    initWithTarget:undefinedTarget action:@selector(loadLevel:)];
您的目标需要是定义
loadLevel:
方法的类的实例


编辑(追踪链接后):即
VideoPlugin
的实例


尽管第二个问题是方法
loadLevel:
不同于
loadLevel
。确保它们是一致的。

代码中的注释表示,.mm或.cpp文件中只需要“extern C”块。您在那里有一个.m文件,所以它是严格必要的吗?需要外部C块,以便在Unity3D中引用该函数。它不是一个.m文件,顺便说一句,它是一个.mm文件,这只是碰巧生成的链接。我的Xcode项目中的文件名称为VideoPlugin.mm该函数在Unity3D中使用的代码中引用如下:[DllImport(“\uuu Internal”)]private static extern void\u playVideo(string videoFilepath);非常感谢您的评论。我有点怀疑这应该是一个问题,但是我发现所有的例子都将self声明为一个目标,我不知道它是什么,如果我尝试的话,Xcode也确定它是一个未声明的标识符。您是否可以给我提供一个示例,说明如何创建一个定义LoadLevel:method(我怀疑是-(void)LoadLevel)的类,然后创建该类的实例?我将非常感激:)这在我的代码中有意义吗?VideoPlugin*SwipTarget=[[VideoPlugin alloc]init];很高兴你让它工作了。显然,您在创建如上所述的实例时走的是正确的道路。
self
变量是一个类的所有方法的隐藏参数,并引用您正在执行操作的实例。它只在一个方法中有效;您使用的是C函数,因此没有
self
变量。如果这个答案是您所需要的,请继续并“接受”它。
id undefinedTarget;
UISwipeGestureRecognizer * swipe = [[UISwipeGestureRecognizer alloc] 
    initWithTarget:undefinedTarget action:@selector(loadLevel:)];