首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RoboVM绑定编译问题

RoboVM绑定编译问题
EN

Stack Overflow用户
提问于 2014-01-05 12:14:27
回答 2查看 1K关注 0票数 4

使用RoboVM绑定:https://github.com/BlueRiverInteractive/robovm-ios-bindings,更具体地说,Google游戏服务绑定。

我似乎无法编译绑定。获取此错误:

代码语言:javascript
复制
An internal error occurred during: "Launching my-gdx-game-robovm".
No @Marshaler found for parameter 3 of @Bridge method 
<org.robovm.bindings.gpgs.GPGLeaderboard: void   
objc_loadScoresWithCompletionHandler(org.robovm.bindings.gpgs.GPGLeaderboard,org.robovm.objc.S elector,org.robovm.bindings.gpgs.GPGLeaderboardLoadScoresBlock)>

现在,您可以说绑定本身有一个错误,但我认为不是这样的,因为下面是发生的情况:

  1. 如果您直接运行GPGC项目(通过运行示例应用程序),它将正确编译并在模拟器上运行。
  2. 如果您试图编译包含GPGC项目引用的整个libGDX游戏,它会抛出此错误。
  3. 如果您更改了GPGLeaderboard文件(包含错误的文件)并尝试直接运行GPGC项目,它也会抛出此错误。如果你第二次运行它,它会神奇地消失。

为什么会发生这种情况?怎么能修好呢?

使用最新的GPGC绑定和最新的RoboVM夜间服务(2014.01.05)。

谢谢。

编辑:绑定的作者修复了这个问题(截至2014.01.07)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-07 11:47:40

块的封送最近在RoboVM中发生了变化。这些绑定的作者必须相应地更新它们。下面是一个示例(来自UIApplication),它展示了如何在实例方法中封送VoidBlock

代码语言:javascript
复制
private static final Selector beginBackgroundTaskWithExpirationHandler$ = Selector.register("beginBackgroundTaskWithExpirationHandler:");
@Bridge private native static int objc_beginBackgroundTask(UIApplication __self__, Selector __cmd__, ObjCBlock handler);
@Bridge private native static int objc_beginBackgroundTaskSuper(ObjCSuper __super__, Selector __cmd__, ObjCBlock handler);
public int beginBackgroundTask(VoidBlock handler) {
    return beginBackgroundTask(VoidBlock.Marshaler.toObjCBlock(handler));
}
protected int beginBackgroundTask(ObjCBlock handler) {
    if (customClass) { return objc_beginBackgroundTaskSuper(getSuper(), beginBackgroundTaskWithExpirationHandler$, handler); } else { return objc_beginBackgroundTask(this, beginBackgroundTaskWithExpirationHandler$, handler); }
}

下面是一个静态方法的示例(在UIView中):

代码语言:javascript
复制
private static final Selector animateWithDuration$animations$ = Selector.register("animateWithDuration:animations:");
@Bridge private native static void objc_animate(ObjCClass __self__, Selector __cmd__, double duration, ObjCBlock animations);
public static void animate(double duration, VoidBlock animations) {
    objc_animate(objCClass, animateWithDuration$animations$, duration, VoidBlock.Marshaler.toObjCBlock(animations));
}
票数 3
EN

Stack Overflow用户

发布于 2014-01-07 16:06:25

BlueRiver绑定已经被更新以包括这些更改--除了在应用程序内购买时使用的UIApplication中的几个回调。你可能只需要调出最新的版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20933411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档