2014-01-05 4 views
4

Использование привязок RoboVM: https://github.com/BlueRiverInteractive/robovm-ios-bindings более конкретно привязки сервисов Google Play Game Service.Проблемы с привязкой 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)> 

Теперь можно сказать, что есть ошибка с креплениями себя, но я думаю, что это не так, потому что Heres что происходит:

  1. Если запустить проект GPGC напрямую (запустив образец приложения), он правильно компилируется и запускается на симуляторе.
  2. Если вы попытаетесь скомпилировать всю вашу игру libGDX, на которой ссылается проект GPGC, она вызывает эту ошибку.
  3. Если вы вносите изменения в файл GPGLeaderboard (файл с ошибкой) и пытаетесь запустить проект GPGC напрямую, это также вызывает эту ошибку. Если вы запустите его во второй раз, он волшебным образом исчезнет.

Почему это происходит? Как это можно исправить?

Использование последних привязок GPGC и новейших новинок RoboVM (2014.01.05).

спасибо.

EDIT: автор привязок исправил эту проблему (по состоянию на 2014.01.07).

ответ

3

Маршалинг блоков недавно изменился в RoboVM. Автору этих привязок необходимо их соответствующим образом обновить. Вот пример (из UIApplication), который показывает, как маршал VoidBlock в методе экземпляра:

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

Смежные вопросы