Unity3d开发中与oc交互之类型转换

  对于没有非科班出身的程序来说,在没有学过C和OC的情况,用unity开发iOS相关的功能,是非常痛苦的。简单写一下自己遇到的,并且没有百度到的坑。

  1、C#给OC传递字典

  一般流程是,C#调用C,C调用OC,但是C没有字典。处理方法,用结构体数组做中转。核心,结构体数组转换字典。

  C#层代码

using System.Runtime.InteropServices;
using UnityEngine;
public class Test : MonoBehaviour
{
    public struct strutDict
    {
        public string key;
        public string value;
    }
    [DllImport("__Internal")]
    private static extern void setNEvent(string eventName, int number, strutDict[] dict);

}

  OC和C中的代码

#import <Foundation/Foundation.h>
@interface test:NSObject
+(test *)instance;@end
@implementation test

static test *xam = nil;
-(id)init{
    self = [super init];
    if(self){

    }
    return self;
}

+(test *)instance{
    if(xam == nil){
        xam = [[test alloc]init];
    }
    return xam;
}

-(void) testDic:(NSDictionary *)dic
{
    //随你怎么用
}

#if defined(__cplusplus)
extern "C"{
#endif
    struct strutDic{
        char* key;
        char* value;
    };
    void setNEvent (char* eventName, int number,struct strutDic *dict[]){
        NSDictionary *nsDic=[[NSDictionary alloc] init];
        for(int i=0;i<number;i++){
            NSString *key =_CreateNSString((*dict[i]).key);
            NSString *value =_CreateNSString((*dict[i]).value);
            [nsDic setValue:value forKey:key];
        }
        [[test instance]testDic:nsDic];
        //[reyun setEvent:_CreateNSString(eventName) andExtra:nsDic];
    }
    //char* 转 nsstring
    NSString *_CreateNSString(const char* string){
        if(string)
            return [NSString stringWithUTF8String:string];
        else
            return [NSString stringWithUTF8String:""];
    }
@end

  

原文地址:https://www.cnblogs.com/lihangppz/p/8244503.html

时间: 2024-10-01 00:28:57

Unity3d开发中与oc交互之类型转换的相关文章

学习经验谈 Unity3d开发中最佳语言还是C

作为学unity3d的新人,开始学它之前就知道unity3d支持C#和JS等等,但在选择用什么语言上我查阅了很多文件,当这个月我用上了unity3d 3.0版时,我发现unity3d 对MONO framework的支持与选择,说明了unity3d 的战略意图: 1:首先unity3d 选择C#,是因为微软这棵大树下有巨量的程序员,并且C#在网络开发方面成绩很优秀 2:为什么在选择Mono这个基于C#的开源框架,Mono是一个由Novell公司(先前是Ximian)主持的项目,众所周知,C#是M

Android开发中与服务器交互时,遇到java.io.IOException: Target host must not be null的问题

当我遇到这个问题的时候,也在网上查找好半天.找到了一个和这个问题很类似的问题——java.lang.IllegalStateException: Target host must not be null 这个里面报的是IllegalStateException,翻译过来是非法状态异常,这个是url的状态,一般来说会是地址不正确(如:在地址的开头缺少http://). 不过,我遇到的是com.lidroid.xutils.exception.HttpException: java.io.IOExc

UIWebView开发中,js与oc,js与swift交互,相互传递参数的方法

实际开发中经常遇到需要向webView传递参数或从webView取参数,在此写了个超简单的demo供大家参考,本人js刚学了一天,所以不足之处海涵. 废话不多说,直接上代码 oc版 1 #import "ViewController.h" 2 @interface ViewController ()<UIWebViewDelegate> 3 @property (nonatomic, strong)UIWebView * webView; 4 @end 5 6 @imple

转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC -----&gt;JS

目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 JavaSciptCore.framework框架介绍 JavaScriptCore是webkit的一个重要组成部分,主要是对js进行解析和提供执行环境.具体介绍请看这篇简书的文章:JavaScriptCore 使用 准备环境 创建一个名为JS与OC交互Demo的iOS工程.然后在storyboard添

iOS中JavaScript和OC交互

在iOS开发中很多时候我们会和UIWebView打交道,目前国内的很多应用都采用了UIWebView的混合编程技术,最常见的是微信公众号的内容页面.前段时间在做微信公众平台相关的开发,发现很多应用场景都是利用HTML5和UIWebView来实现的. 机制 Objective-C语言调用JavaScript语言,是通过UIWebView的 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;的方法来实现的.

unity3d开发的android应用中增加AD系统的详细步骤

unity3d开发的android应用中增加AD系统的详细步骤 博客分类: Unity3d unity3d Unity3d已经支持android,怎样在程序里增加admob? 试了一下,确实能够,只是必需要把androidproject的包名改成unitypackage里的包名. 决定自己也做一个unity3d的Plugins,记录一下步骤: 经过自己測试wozik提供的Plugins中的AndroidManifest.xml.res,libs.bin是必须的,其它东西都能够去掉. 依照这个思路

iOS中JavaScript和OC交互 --by 胡 xu

在iOS开发中很多时候我们会和UIWebView打交道,目前国内的很多应用都采用了UIWebView的混合编程技术,最常见的是微信公众号的内容页面.前段时间在做微信公众平台相关的开发,发现很多应用场景都是利用HTML5和UIWebView来实现的. 机制 Objective-C语言调用JavaScript语言,是通过UIWebView的 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;的方法来实现的.

Unity3d Android Http 开发中的坑(吐槽

在一般的U3D网络开发中,直接使用WWW类便足够正常使用,但我在发现使用WWW下载大文件时,会导致整个程序卡顿的情况(不清楚是否我个人电脑问题),所以干脆使用HttpWebRequest/HttpWebResponse + await/async 来代替WWW. U3D中还是在使用比较低的Mono版本,所以是不支持(await/async)的.准确来说是不支持Task<T>,而且还有些BUG(我自个能确定的就有两个),现在最希望就是U3D更新Mono版本,写代码就可以更爽了! 无奈之下,只有参

iOS开发——面试篇&amp;OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的