给PageView添加监听后,ide报错

给PageView添加监听后,网页可以正常运行,而cocos code ide上则会包错:

cocos2d: Assert failed: this dictionary doesn’t use string as key.

frameworks/js-bindings/cocos2d-x/cocos/deprecated/CCDictionary.cpp, line 226.

js版本:v3.1
ide版本:V1.1.0
代码:
ctor: function () {
this._super();

        var testLayer = ccs.csLoader.createNode(res.test1layer);
        this.addChild(testLayer);


        var seekWidgetByName = ccui.helper.seekWidgetByName;


        this._testLayer = seekWidgetByName(testLayer, "PageView_1");
        this._testLayer.setCustomScrollThreshold(0.1);
        this._testLayer.addEventListener(this._pageViewEvent, this);
        return true;
    },


    _pageViewEvent: function (sender, type) {
        switch (type) {
            case ccui.PageView.EVENT_TURNING:
                //var pageView = sender;
                cc.log(this._testLayer.getCurPageIndex());
                break;
            default:
                break;
        }
    }

:7: :7: :7: :7: :7: :7: :7:

原因:控件绑定文件中,cobj->getUserObject()引起的冲突。( frameworks/js-bindings/bindings/manual/ui/jsb_cocos2dx_ui_manual.cpp)
https://github.com/cocos2d/cocos2d-js/commit/78d1d0a42dc8c05007ac891a482beb72f2c119a8
修改代码:
if (argc == 2) {
jsval *argv = JS_ARGV(cx, vp);

    JSStudioEventListenerWrapper *tmpObj = new JSStudioEventListenerWrapper();
    tmpObj->autorelease();

// 原代码
// cocos2d::__Dictionary* dict = static_castcocos2d::__Dictionary*(cobj->getUserObject());
//
// if (nullptr == dict)
// {
// dict = cocos2d::__Dictionary::create();
// cobj->setUserObject(dict);
// }

// 修改
CallbacksComponent *comp = static_cast<CallbacksComponent >(cobj->getComponent(CallbacksComponent::NAME));
if (nullptr == comp)
{
comp = new CallbacksComponent();
comp->autorelease();
cobj->addComponent(comp);
}
cocos2d::__Dictionary
dict = comp->callbacks;
//

    dict->setObject(tmpObj, "pageViewEventListener");

    tmpObj->setJSCallbackFunc(argv);
    tmpObj->setJSCallbackThis(argv);

    cobj->addEventListenerPageView(tmpObj, pagevieweventselector(JSStudioEventListenerWrapper::eventCallbackFunc));

    return true;
}

其他的控件加监听时做同样的修改

遇到同样的问题。。。

报错信息有个路径:/Users/hujiang/tools/publish/createPrebuiltRuntime/PrebuiltRuntimeJs/frameworks/js-bindings/cocos2d-x/cocos/deprecated/CCDictionary.cpp

我电脑木有hujiang这个用户,更不会有这个路径了。为啥会报这个路径的错?

其实,我的问题是:我应该修改哪个地方的 jsb_cocos2dx_ui_manual.cpp 文件?
我修改了ide配置的cocos2d js 路径下的framework下的文件,好像不起作用。。。

谢谢!!

在framework/js-bingdings/manual/ui/jsb_cocos2dx_ui_manual.cpp
修改完以后需要重新编译一下C++代码

oh~~~

谢谢!!