WINPLAYMODE was deprecated please use IS_PC_OPER_MODE instead.
*********************************
Inner height <= scrollview height, it will be force sized!
Inner height <= scrollview height, it will be force sized!
[LUA-print] [12:15:57-513] --------
根据你提供的错误信息和代码分析,问题主要出现在以下几个方面:
## 1. WINPLAYMODE废弃警告
在代码中使用了`SL:GetMetaValue("WINPLAYMODE")`,现在应该使用`SL:GetMetaValue("IS_PC_OPER_MODE")`来替代。
**修改建议:**
```lua
-- 旧代码
local isWIN32 = SL:GetMetaValue("WINPLAYMODE")
-- 新代码
local isPC = SL:GetMetaValue("IS_PC_OPER_MODE")
```
## 2. nil值错误分析
错误信息显示`target is nil value`,发生在`GUI:removeFromParent(self.textNode)`这一行。
**问题原因:**
1. 第36行代码中`self.textNode`可能为nil
2. 在`updateUI`函数中,你检查的是`self.Text_1`,但移除的是`self.textNode`
3. 变量名大小写不一致导致的问题
**修改建议:**
```lua
function DengJiDiTu:updateUI(data)
local ui = self.ui
local cfg = self._cfg
for i = 1, 5 do
UILib:addOnClickEvent(ui["Bt_"..i], function()
local condition = cfg[i].condition
-- 先检查节点是否存在,再移除
if self.textNode and not GUI:Win_IsNull(self.textNode) then
GUI:removeFromParent(self.textNode)
self.textNode = nil
end
-- 创建新的文本节点
self.textNode = GUI:Text_Create(ui.Image_5, "Text_1"..i, 0, 4, 16, "#ffffff", condition)
end)
end
end
```
## 3. 其他建议
1. **变量命名统一**:保持`self.textNode`的大小写一致
2. **nil值检查**:在调用`GUI:removeFromParent()`前,先使用`GUI:Win_IsNull()`检查节点是否有效
3. **初始化变量**:在类的初始化函数中定义`self.textNode = nil`
## 4. 完整修改示例
```lua
function DengJiDiTu:init()
self._cfg = Util:requireCfg(self.mCfg.clientObjPath)
self.textNode = nil -- 初始化变量
end
function DengJiDiTu:updateUI(data)
local ui = self.ui
local cfg = self._cfg
for i = 1, 5 do
UILib:addOnClickEvent(ui["Bt_"..i], function()
local condition = cfg[i].condition
-- 安全移除旧节点
if self.textNode and not GUI:Win_IsNull(self.textNode) then
GUI:removeFromParent(self.textNode)
end
self.textNode = nil
-- 创建新节点
if condition then
self.textNode = GUI:Text_Create(ui.Image_5, "Text_1"..i, 0, 4, 16, "#ffffff", condition)
end
end)
end
end
```
**注意**:浮生梦老师提醒,在操作UI节点前一定要做好nil值检查,避免出现"target is nil"的错误!