NotificationLayer :updateDataToUI 方法m_pScrollView->getContainer()坏掉的解决方案


void NotificationLayer::updateDataToUI()
{
//MILabelTTF* pLabel = (MILabelTTF*)m_pScrollView->getContainer();
m_pLabel->setString(ServerInfo::s_pNotification->getCString());
m_pScrollView->setDirection(kCCScrollViewDirectionVertical);
m_pScrollView->setContentOffset(ccp(0,m_pScrollView->boundingBox().size.height - m_pLabel->getContentSize().height ));
}

MILabelTTF* pLabel = (MILabelTTF*)m_pScrollView->getContainer();

在这里会报错,m_pScrollView指针已经未知了。原因未明。。。


解决办法:在.h中加入label成员变量

protected:
CCScrollView *m_pScrollView;
MILabelTTF* m_pLabel;

然后m_pLabel作为一个container加入到CCScrollView中:

m_pLabel = MILabelTTF::create(ServerInfo::s_pNotification->getCString(),UIConst::FONT_SIZE_NORMAL,CCRectMake(x,y,scrollWidth,0),m_pScrollView->getZOrder(),m_pScrollView,false,kCCTextAlignmentLeft);
m_pLabel->setColor(ccc3(65,20,20));
m_pScrollView->setContainer(m_pLabel);

测试几次,问题没有重现。

后续错误继续出现,原因为:当时Notification这个控件已经被removeFromParentAndCleanup(true)了,bug是它自身m_pNotificationLayer并没有==NUll,但是它里面的所有东西已经被清空掉造成了指针错误。

解决办法为点击确定后removeFromParentAndCleanup在它的父类删除,然后使m_pNotificationLayer==NULL;在响应网络协议的的地方如果m_pNotificationLayer==NULL就不要调用update方法了。

你可能感兴趣的:(解决方案)