大家有没有遇到使用网络通过CCNotificationCenter传递回调切换场景结果出错的情况?

最近在用cocos开发网络游戏, 想用CCNotificationCenter在登陆完成后切换场景, 但是切换之后总是出错.
如果能够切换, 那么显示不出内容.
如果使用CSLoader加载csb文件则会报访问冲突.
不知道有没有什么方法解决这个问题?
代码如下:
bool lobbyScene::init()
{
CCLOG(“init lobby now”);
if (!Layer::init())
{
return false;
}
Node *main_node = CSLoader::createNode(“register.csb”);
this->addChild(main_node);
return true;
}

void HelloWorld::msgCallBack(cocos2d::CCObject *obj)
{
CCLOG(“msgCallBack, int=%d”, obj);
CCNotificationCenter::sharedNotificationCenter()->removeObserver(this, “personMessage”);
this->addChild(lobbyScene::create());
this->removeFromParent();
CCLOG(“switch ok”);
}

void webCommunicate::dealWithData()
{
CCLOG(“webPart: dealWithData”);
int tempInt01=0;
if (sscanf(m_dataBuf.c_str(), “isLogIn:%d:”, &tempInt01)==1)
{//登陆与否
CCLOG(“webPart: logIn=%d”, tempInt01);
//发送信息
CCNotificationCenter::sharedNotificationCenter()->postNotification(“personMessage”, NULL);
}
}

void webCommunicate::receiveData()
{
while (true) {
// 接收数据 Recv
char data = “”;
CCLOG(“webPart: while now server”);
int result = s_socket->Recv(data, 512, 0);
CCLOG(“webPart: %d”, result);
if (result <= 0)
{// 与服务器的连接断开了
CCLOG(“webPart: server result <= 0”);
break;
}
CCLOG(“webPart: server returns=%s”, data);
//存入buf
m_dataBuf.append(data, result);
m_buf << string(data, result);
//处理数据
this->dealWithData();
}
// 关闭连接
CCLOG(“server Close”);
s_socket->Close();
}
void webCommunicate::startListen()
{
CCLOG(“webPart: startListen”);
// 开启新线程,在子线程中,接收数据
std::thread recvThread = std::thread(&webCommunicate::receiveData, this);
recvThread.detach(); // 从主线程分离
}

不知道会不会和多线程也有关系?

要在同一个线程里面才能用CCNotificationCenter::sharedNotificationCenter()->postNotification,可能你网络是另外一个线程。因为cocos是用的gl线程,和你开辟的线程不是同一个