2014-01-05 87 views
4

使用RoboVM綁定:https://github.com/BlueRiverInteractive/robovm-ios-bindings 更具體地說Google Play遊戲服務綁定。RoboVM綁定編譯問題

我似乎無法編譯綁定。收到此錯誤:

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)。

回答

3

RoboVM最近改變了塊的編組。這些綁定的作者必須相應地更新它們。下面是說明如何封送VoidBlock在實例方法的例子(從UIApplication):

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):

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)); 
} 
+0

據我所知綁定是最新的RoboVM更新。也許你不明白我最初的問題,綁定編譯直接編譯,並拋出錯誤,如果他們從另一個項目引用編譯(請參閱我原來的問題3點)。感謝您的答覆。 –

+1

好的,對不起,我聯繫了綁定的作者,他設法解決這個問題。 ;) –

2

的BlueRiver綁定有已經進行了更新以包含這些更改 - 除了在應用內購買中使用的UIApplication中的幾次回調。你可能只需要拉最新版本。

+0

好的,是的,我知道這些錯誤是固定的,我在我的問題中提到我有最新的綁定。只是爲了確保我再次下載它們(2014.01.07)。問題依然存在。還要看看我在問題中提到的3點,那是什麼讓它變得有趣。 –

+0

看起來像GPGLeaderboard剛剛在幾個小時前剛修復,可能在更新後。 – ericn

+0

至於你關於不一致構建錯誤的其他觀點,我也看到了這一點,但它通常在構建之後或在構建過程中對我造成錯誤 – ericn