Не удалось вызвать метод Objective-C из Cocos-2d через JavaScriptObjCBridge.

URL: https://github.com/cocos-creator/creator-docs/blob/master/en/advanced-topics/oc-reflection.md

Выше приведена документация для вызова метода Objective-C из сценария Cocos.

Я пытаюсь сделать то же самое, но получаю ошибку

2020-07-21 15:56:01.094441+0800 hello_world-mobile[63684:4206926] TestingLogging.testingIntegration method isn't found!
[ERROR] (/Applications/CocosCreator/Creator/2.3.3/CocosCreator.app/Contents/Resources/cocos2d-x/cocos/scripting/js-bindings/manual/JavaScriptObjCBridge.mm, 418): call (TestingLogging.testingIntegration) failed, result code: -3
[ERROR] Failed to invoke JavaScriptObjCBridge_callStaticMethod, location: /Applications/CocosCreator/Creator/2.3.3/CocosCreator.app/Contents/Resources/cocos2d-x/cocos/scripting/js-bindings/manual/JavaScriptObjCBridge.mm:427

Снимок экрана 21 июля 2020 г., 16:05:36

.h класс

//
//  TestingLogging.h
//  hello_world-mobile
//
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface TestingLogging : NSObject

+(void) testingIntegration: (NSString *) string;

@end

NS_ASSUME_NONNULL_END

м класс

//
//  TestingLogging.m
//  hello_world-mobile
//
//

#import "TestingLogging.h"

@implementation TestingLogging


+(void)testingIntegration:(NSString *)string {
    NSLog(@"First ios call from cocos creator app %@", string);
}

@end

Скрипт в кокосах

onCameraClickHandler () {
    if(cc.sys.OS_IOS == cc.sys.os) {           
        var ret = jsb.reflection.callStaticMethod("TestingLogging", "testingIntegration", "Hello iOS")
    }
}

Не могли бы вы мне помочь !


person Kuldeep Bhimte    schedule 21.07.2020    source источник


Ответы (1)


В Objective-C двоеточие является частью имени метода. Это упоминается в связанной документации

Параметр methodName в предыдущем примере — это имя метода OC в вашем классе, возьмем в качестве примера NativeOcClass, мы можем увидеть метод с именем

+(BOOL)callNativeUIWithTitle:(NSString *)title andContent:(NSString *)content;

Таким образом, имя метода должно быть callNativeUIWithTitle:addContent:, которое является определением для этого метода, и не забудьте :.

Имя метода testingIntegration:. Измените сценарий на

var ret = jsb.reflection.callStaticMethod("TestingLogging", "testingIntegration:", "Hello iOS")
person Willeke    schedule 21.07.2020
comment
Вы раньше работали с Cocos2d? Я хотел знать, можем ли мы импортировать фреймворки непосредственно в IDE для создания кокосов. - person Kuldeep Bhimte; 22.07.2020
comment
@KuldeepBhimte Нет, я не знаком с Cocos2d. Задайте новый вопрос, пожалуйста. - person Willeke; 22.07.2020
comment
Мои вопросы к Cocos2d. В любом случае спасибо за ответ - person Kuldeep Bhimte; 22.07.2020