iOS 中C如何调用Objective c的代码更新界面问题解决

来源:互联网 发布:sql server select if 编辑:程序博客网 时间:2024/06/06 04:41

因为费时的处理实在c中,或许你的c库是某个库比如视频处理库ffmpeg,那么ffmpeg处理视频的时候非常耗时间,并且进度到了多少,你需要让用户知道。但是ios的界面是objective c代码。所有我们需要用c里面的代码不断返回数据给objective c,不但更新进度多少了。


下面的代码就是解决这个问题!


1、建立c的中间层。分为两个文件,PassLocalValueToOC.h 和

PassLocalValueToOC.m

这个就是为了让c调用的,然后它的方法又调用objective c的,.h文件如下:

#ifndef PassLocalValueToOC_h

#define PassLocalValueToOC_h

void passLocalValueTo(float currentProgress);


#endif /* PassLocalValueToOC_h */



那么.m文件就实现这个方法了,如下:

#include "PassLocalValueToOC.h"


void passLocalValueTo(float currentProgress){

    SEL s = NSSelectorFromString(@"updateNowProgress:");

    id myObj = [[NSClassFromString(@"PlayVideoViewController") alloc] init];

    NSString *stringFloat = [NSString stringWithFormat:@"%f",currentProgress];

    if([myObj respondsToSelector:s]) {

        

        [myObj performSelector:s withObject:stringFloat]; //注意如果有两个参数,使用两个withObject:参数;

        

    }

//    objc_msgSend(myObj, s);

}


注意这个.m文件,不要用什么import ,不要写什么PlayVideoViewController *player,然后直接[player updateNowProgress:@""]这样的。


因为编译不通过,原因为啥,我是ios新手,没时间追究了。


ok,PlayVideoViewController里面的那个方法,你应该会写。就写到这里吧!






0 0