请教一个问题:Button通过addTouchEventListener,在回调函数里name丢失了

今天碰到一个很诡异的问题
我通过

Widget *uiRoot = cocostudio::GUIReader::shareReader()->widgetFromJsonFile(“test.json”);
Button button = (Button)uiRoot->getChildByName(“testButton”);
std::string name = button->getName();
CCLog(name); //这里可以打印名字

button->addTouchEventListener(CC_CALLBACK_2(HelloWorld::onButtonClicked, this));

void HelloWorld::onButtonClicked(Ref* sender, ui::Widget::TouchEventType type)
{
Button button = (Button)sender;
std::string name = button->getName();
CCLog(name); //这里打印的是空字符串
}
百思不得姐啊, 忘高手指教。

想办法确认下,button跟你响应函数里拿到的是不是同一个指针。

我在获取Tag的时候是可以获得的,获取的Name是空的,

用dynamic_cast转

Debug看看,指针是不是button

谢谢各位的回答, 我后来做了如下测试

    
void HelloWorld::button_clicked(cocos2d::Ref* sender, cocos2d::ui::Widget::TouchEventType type)
{
      .
      .
      .

    auto button = dynamic_cast<ui::Button *>(sender);
    const char *name = button->getName().c_str();
    int tag = button->getTag();
    CCLog("%d", tag);

    CCLog(name);
    if (m_button == sender)
    {
        CCLog("equal button pointer");
    }
}

打印结果
172

equal button pointer

tag能打印出来,指针也相同, 但是打印不出name, 我的cocos版本是3.2

我用了3.2alpha0 版本的就可以,这个版本的getName()函数是在UIWidget类里面的, 而3.2里的getName就跑到CCNode类里了, 不知道是不是这个改变导致了这个问题

我后来做了如下测试

void HelloWorld::button_clicked(cocos2d::Ref* sender, cocos2d::ui::Widget::TouchEventType type)
{
      .
      .
      .
    auto button = dynamic_cast<ui::Button *>(sender);
    const char *name = button->getName().c_str();
    int tag = button->getTag();
    CCLog("%d", tag);
    CCLog(name);
    if (m_button == sender)
    {
        CCLog("equal button pointer");
    }
}

打印结果
172

equal button pointer

tag能打印出来,指针也相同, 但是打印不出name, 我的cocos版本是3.2

打印Name请用CCLOG("%s", name);

CCLog的第一个参数是format string,楼主直接把字符串指针赋值过去。。。。
:12: