我在插件开发/
期间在我的wow客户端收到以下错误83x FrameXML\OptionsFrameTemplates.lua:157: attempt to index field
'text' (a nil value)
FrameXML\OptionsFrameTemplates.lua:157: in function <FrameXML\OptionsFrameTemplates.lua:156>
Locals:
self = ShiftDropDown_Button {
0 = <userdata>
toggle = ShiftDropDown_ButtonToggle {
}
}
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to index field 'text' (a nil value)"
我用这个
在XML文件中调用它 <Button name="ShiftDropDown_Button" inherits="InterfaceOptionsListButtonTemplate" text="Select Target">
<Size>
<AbsDimension x="150" y="10" />
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="189" y="-115" />
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
ShiftDropDown_Button_OnLoad(self)
</OnLoad>
<OnClick>
ShiftDropDownFrame:Show()
</OnClick>
</Scripts>
并且Lua中的函数在这里
function ShiftDropDown_Button_OnLoad(self)
self:RegisterEvent('ADDON_LOADED')
self:SetScript('OnEvent', function(self, event, ...)
if event == 'ADDON_LOADED' and ... == 'TauntMasterReborn' then
TauntMasterRebornDB = TauntMasterRebornDB or {}
for option, value in pairs(TauntM_defaults) do
if not TauntMasterRebornDB[option] then TauntMasterRebornDB[option] = value end
end
self:SetText(TauntMasterRebornDBChar.SHIFTTARGET1)
end
end)
end
有人可以解释为什么会抛出这个错误吗?我搜索了很多例子,找不到调试方法或解决问题的方法。
答案 0 :(得分:4)
您的按钮继承自InterfaceOptionsListButtonTemplate
,而该按钮最初继承自OptionsListButtonTemplate
。
此模板具有按钮文字:
<ButtonText name="$parentText" justifyH="LEFT" wordwrap="false"/>
以下是发生错误的代码:
function OptionsListButton_OnEnter (self)
if (self.text:IsTruncated()) then
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
GameTooltip:SetText(self:GetText(), NORMAL_FONT_COLOR[1], NORMAL_FONT_COLOR[2], NORMAL_FONT_COLOR[3], 1, true);
end
end
它尝试通过使用self
使用按钮文本的属性值-在这种情况下为self.text
-。 text
parentKey不是在xml文件中分配的,而是在OnLoad
中分配的
功能,该功能已被您覆盖。
要修复模板,您必须扩展ShiftDropDown_Button_OnLoad
函数:
function ShiftDropDown_Button_OnLoad(self)
self.text = _G[self:GetName() .. "Text"];
self.highlight = self:GetHighlightTexture();
self:RegisterEvent('ADDON_LOADED')
self:SetScript('OnEvent', function(self, event, ...)
if event == 'ADDON_LOADED' and ... == 'TauntMasterReborn' then
TauntMasterRebornDB = TauntMasterRebornDB or {}
for option, value in pairs(TauntM_defaults) do
if not TauntMasterRebornDB[option] then TauntMasterRebornDB[option] = value end
end
self:SetText(TauntMasterRebornDBChar.SHIFTTARGET1)
end
end)
end