報錯:invalid 'cobj' in function 'lua_cocos2dx_Node_addChild'

在測試項目過程中,二次打開某一個界面,碰到了這個報錯。問題復現過程:

  1. 打開A界面(父節點所在界面),在A界面中點擊按鈕打開子界面B添加到父節點中  
  2. 操作完成後關閉B界面,同時關閉A界面
  3. 重複1的操作,再打開B界面的時候報錯,invalid 'cobj' in function 'lua_cocos2dx_Node_addChild'

在網上查詢的原因是父節點被刪除了,但是這個父節點所在界面是新添加的,不應該不存在或者被刪除了。爲了驗證父節點是否還存在,用tolua.isnull(父節點)測試之後輸出爲true,證實是父節點不存在了。這個時候更加疑惑,爲什麼新添加的父節點會不存在???

經過網上查找資料和驗證,找到了問題根源。我的界面管理是通過事件派發的形式,在主界面打開時註冊所有相關子界面事件,存放到一個表中,關閉時把事件註銷即清空事件列表。B界面的註銷事件忘了添加,所以再次打開A界面時,事件列表中再次註冊B界面事件失敗,因爲表中已存在(上次關閉A界面時未清除)。因爲C++ 對象保存到 lua後,如果lua代碼中還有使用這些數據,即使 C++ 對象已經被刪除了,但 lua 數據仍然會存在。所以表中保存的是上次父節點數據,即已經被刪除了,所以會報錯。

解決方法:關閉界面時把未刪除的事件註銷

 

PS:

參考資料:

https://blog.csdn.net/u012685888/article/details/78583374

https://blog.csdn.net/register_man/article/details/77679720

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章