今天测试发现了游戏的一个问题,系统邮件,如果发了tab,在android上一打开邮件内容就会crash。而且他们很确定是tab的问题。
凭我多个月的经验(确实没多年。。。)来看,从来没听说在android上会因为一个tab崩溃,而且如果有这个问题,肯定会有很多人遇到,估计早就吵翻天了,搜索了一下,什么可用信息都没有。
于是写个测试工程测试了一下,分别在mac下和windows下,用文本编辑工具编辑了4个txt文档,utf有bom和无bom,内容是“ tab abcd ”,发现都能正常显示,也不会crash。如下:
unsigned long fSize = 0;
unsigned char *data = CCFileUtils::sharedFileUtils()->getFileData("tab.txt", "rb", &fSize);
CCLabelTTF *label = CCLabelTTF::create((const char*)data, "abc", 30);
label->setPosition(ccp(visibleSize.width/2, visibleSize.height/2));
addChild(label);
然后开始怒跟代码,发现工程中使用了一个自定义控件,是为了实现一个富文本框的功能。所谓富文本框就是能显示各种颜色,能显示url,有的东西还能点的那种。但是这个东西的实现,其中有一步,是把一个utf8字符串拆开,拆成单个字符,把每个字符的纹理做出来,然后来拼图,拼成一个文本框。那么tab肯定会被拆成单个字符,最后发现就是在生成这个tab的纹理的时候,crash了。堆栈如下: