CodenameOne - ObjectiveC Bridge - 将C头定义转换为ObjC Bridge

时间:2018-01-29 13:19:02

标签: codenameone

我有霍尼韦尔Captuvo SL22的Objective C方法,SDK说我可以用来接收扫描的条形码数据:

-(void)decoderDataReceived:(NSString*)data;

我试图在ObjectiveC Bridge中使用它,如下所示:

Objc.DelegateObject delegate = Objc.makeDelegate()
    .add("decoderDataReceived:", Method.create(Method.ArgType.Void , new Method.ArgType[]{Method.ArgType.CString},args ->
    {
        Log.p("Received " + args[0]);
        return null;
    }));
Objc.eval(captuvoShared, "addCaptuvoDelegate:", delegate);

然而,即使我已经成功连接到扫描仪,当我进行扫描显示扫描仪指示灯和哔声时,“decoderDataReceived”方法没有被调用?

1 个答案:

答案 0 :(得分:2)

在Objective-C中,NSString只是一个常规对象(即它是NSObject的子类),因此您可以使用ArgType.Object作为参数类型。 ArgType.CString参数类型将用于const char*

所以只需将代码更改为

即可

Objc.DelegateObject delegate = Objc.makeDelegate()
    .add("decoderDataReceived:", Method.create(Method.ArgType.Void , new Method.ArgType[]{Method.ArgType.Object},args ->
    {
        Log.p("Received " + args[0]);
        return null;
    }));
Objc.eval(captuvoShared, "addCaptuvoDelegate:", delegate);

你应该做得好。