When use a frame to register non-existed event, it'd throw an error, that's why the first try failed.
I guess the AceEvents handle it like
Lua Code:
local events = {}
local frame = CreateFrame("Frame")
frame:SetScript("OnEvent", function(self, event, ...)
for frm, handler in pairs(events[event]) do
frm[handler](frm, event, ...)
end
end)
function addon:RegisterEvent(event, handler)
if not events[event] then
events[event] = {}
-- Where the error raised when event not existed
-- But the events[event] already existed, so no error next time
frame:RegisterEvent(event)
end
-- register the handler to the addon
events[event][self] = handler
return true
end
So, you can make a version of your own, it's not complicated