http://www.cocoachina.com/bbs/read.php?tid-200293-page-e-fpage-20.html
PS 3.6里面这个问题依然存在
LUA XMLHttpRequest 中有个bug
static int lua_cocos2dx_XMLHttpRequest_getResponseHeader(lua_State* L)函数中( 970行 )
auto iter = self->getHttpHeader().find(value);
if (iter != self->getHttpHeader().end())
{
tolua_pushstring(L, (iter->second).c_str());
return 1;
}
这段代码有个bug,
因为
self->getHttpHeader()
返回的是一个临时变量的map(参看定义 std::map<std::string, std::string> getHttpHeader() { return _httpHeader ;}),
这个临时变量在该行代码结束时就被销毁了,导致iter失效了。
所以在lua中如果调用 getResponseHeader()就会失败。如果是debug模式的话,debugruntime会报告 Expression: map/set iterators incompatible 异常。
解决办法有2个。
1:更改 std::map<std::string, std::string> getHttpHeader() { return _httpHeader ;}定义为std::map<std::string, std::string>& getHttpHeader() { return _httpHeader ;}
2:
auto iter = self->getHttpHeader().find(value);
if (iter != self->getHttpHeader().end())
{
tolua_pushstring(L, (iter->second).c_str());
return 1;
}
更改为
map<string, string> httpHeader = self->getHttpHeader();
auto iter = httpHeader.find(value);
if (iter != httpHeader.end())
{
tolua_pushstring(L, (iter->second).c_str());
return 1;
}