[LUA-print] LUA ERROR: target is nil value
[LUA-print] stack traceback:
[string "scripts/GUI/GUI.lua"]:101: in function 'CheckIsInvalidCObject'
[string "scripts/GUI/GUI.lua"]:4223: in function 'CheckBox_addOnEvent'
[string "GU
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-16 21:08:35 |
👁️ 阅读: 14
这个错误是因为 `PlayerBaseAtt._ui.CheckBox_shizhuang` 这个控件对象是 `nil`(空值),导致 `GUI:CheckBox_addOnEvent` 函数调用失败。
**问题分析:**
错误发生在 `PlayerBaseAtt.lua` 文件的第109行,也就是 `InitEquipSetting` 函数中。你调用了:
```lua
GUI:CheckBox_addOnEvent(PlayerBaseAtt._ui.CheckBox_shizhuang, function() ... end)
```
但 `PlayerBaseAtt._ui.CheckBox_shizhuang` 这个控件不存在,所以传入了 `nil`。
**解决方法:**
1. **检查UI文件**:确认你的UI布局文件(`player/player_base_attri_node_win32`)中是否真的有一个名为 `CheckBox_shizhuang` 的CheckBox控件。名字必须完全匹配。
2. **在调用前先判断控件是否存在**:这是最关键的修复步骤。在调用任何控件操作函数前,应该先检查控件是否有效。
修改 `InitEquipSetting` 函数如下:
```lua
function PlayerBaseAtt.InitEquipSetting()
-- 先检查控件是否存在
if not PlayerBaseAtt._ui or GUI:Win_IsNull(PlayerBaseAtt._ui.CheckBox_shizhuang) then
SL:Print("错误:CheckBox_shizhuang 控件不存在!")
return
end
GUI:setVisible(PlayerBaseAtt._ui.Text_shizhuang, true)
GUI:setVisible(PlayerBaseAtt._ui.CheckBox_shizhuang, true)
GUI:CheckBox_addOnEvent(PlayerBaseAtt._ui.CheckBox_shizhuang, function()
local isSelected = GUI:CheckBox_isSelected(PlayerBaseAtt._ui.CheckBox_shizhuang)
SL:SetMetaValue("SUPEREQUIP_SHOW", isSelected)
SL:SendSuperEquipSetting(1) -- 通知服务器 时装显示开关
end)
end
```
**调试建议:**
你可以在 `main` 函数中 `PlayerBaseAtt._ui` 赋值后,打印一下所有控件的名称来检查:
```lua
if PlayerBaseAtt._ui then
for name, widget in pairs(PlayerBaseAtt._ui) do
SL:Print("控件名:", name)
end
end
```
这样就能看到 `CheckBox_shizhuang` 是否真的被加载到 `_ui` 表中了。如果看不到,说明UI文件中没有这个控件,需要去UI编辑器里添加。
这个错误是因为 `PlayerBaseAtt._ui.CheckBox_shizhuang` 这个控件对象是 `nil`(空值),导致 `GUI:CheckBox_addOnEvent` 函数调用失败。
**问题分析:**
错误发生在 `PlayerBaseAtt.lua` 文件的第109行,也就是 `InitEquipSetting` 函数中。你调用了:
```lua
GUI:CheckBox_addOnEvent(PlayerBaseAtt._ui.CheckBox_shizhuang, function() ... end)
```
但 `PlayerBaseAtt._ui.CheckBox_shizhuang` 这个控件不存在,所以传入了 `nil`。
**解决方法:**
1. **检查UI文件**:确认你的UI布局文件(`player/player_base_attri_node_win32`)中是否真的有一个名为 `CheckBox_shizhuang` 的CheckBox控件。名字必须完全匹配。
2. **在调用前先判断控件是否存在**:这是最关键的修复步骤。在调用任何控件操作函数前,应该先检查控件是否有效。
修改 `InitEquipSetting` 函数如下:
```lua
function PlayerBaseAtt.InitEquipSetting()
-- 先检查控件是否存在
if not PlayerBaseAtt._ui or GUI:Win_IsNull(PlayerBaseAtt._ui.CheckBox_shizhuang) then
SL:Print("错误:CheckBox_shizhuang 控件不存在!")
return
end
GUI:setVisible(PlayerBaseAtt._ui.Text_shizhuang, true)
GUI:setVisible(PlayerBaseAtt._ui.CheckBox_shizhuang, true)
GUI:CheckBox_addOnEvent(PlayerBaseAtt._ui.CheckBox_shizhuang, function()
local isSelected = GUI:CheckBox_isSelected(PlayerBaseAtt._ui.CheckBox_shizhuang)
SL:SetMetaValue("SUPEREQUIP_SHOW", isSelected)
SL:SendSuperEquipSetting(1) -- 通知服务器 时装显示开关
end)
end
```
**调试建议:**
你可以在 `main` 函数中 `PlayerBaseAtt._ui` 赋值后,打印一下所有控件的名称来检查:
```lua
if PlayerBaseAtt._ui then
for name, widget in pairs(PlayerBaseAtt._ui) do
SL:Print("控件名:", name)
end
end
```
这样就能看到 `CheckBox_shizhuang` 是否真的被加载到 `_ui` 表中了。如果看不到,说明UI文件中没有这个控件,需要去UI编辑器里添加。
← 返回问答库