我在插件开发期间在我的WOW客户端收到以下错误
83x FrameXMLOptionsFrameTemplates.lua:157: attempt to index field
'text' (a nil value)
FrameXMLOptionsFrameTemplates.lua:157: in function <FrameXMLOptionsFrameTemplates.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
任何人都可以阐明为什么要丢这个错误吗?我已经搜索了很多示例,无法找到一种调试或解决自己的方法。
您的按钮从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.text
使用按钮文本的属性值 - 在这种情况下为self
-。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