EllanJiang/GameFramework · error · GameFrameworkException
UI group ' ' not exists specified UI form '[ ] '.
Error message
UI group '{0}' not exists specified UI form '[{1}]{2}'. What it means
During RemoveUIForm, after locating the UIFormInfo the library removes it from the group's internal linked list. If the removal fails it throws GameFrameworkException naming the group and the form '[serialId]assetName', an internal-inconsistency signal: the info existed for lookup but not for removal.
Solutions
- Remove duplicate/re-entrant CloseUIForm calls for the same form
- Never call CloseUIForm on a form from inside its own OnClose/OnCover callbacks; defer with a flag or next-frame mechanism
- Verify all UI operations stay on the main thread
Example fix
// before
void OnCloseClicked()
{
uiGroup.CloseUIForm(this); // inside form callback
uiGroup.CloseUIForm(this); // duplicate close
}
// after
void OnCloseClicked()
{
if (m_CloseRequested) return;
m_CloseRequested = true;
uiGroup.CloseUIForm(this);
} Defensive patterns
Strategy: try-catch
Validate before calling
if (m_ClosingForms.Contains(uiForm.SerialId)) return; m_ClosingForms.Add(uiForm.SerialId);
Type guard
bool NotAlreadyClosing(int serialId) => !m_ClosingForms.Contains(serialId);
Try / catch
try { uiGroup.CloseUIForm(uiForm); } catch (GameFrameworkException ex) { Log.Error($"UI form list inconsistency: {ex.Message}"); } Prevention
- Guard against re-entrant/duplicate CloseUIForm calls with a closing set
- Do not close forms from inside their own OnClose/OnCover callbacks
- Keep all UI operations on the main thread
When it happens
Trigger: A form's UIFormInfo disappears from m_UIFormInfos between lookup and removal — e.g. re-entrant CloseUIForm calls on the same form from within UI lifecycle callbacks (OnClose/OnCover) or another thread.
Common situations: Closing the same form twice in one frame (once from a button handler, once from logic); CloseUIForm triggered inside the form's own close/cover callbacks; concurrent close calls without main-thread confinement.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- Open UI form info is invalid.
- Internal download error.
- UI form asset is invalid.
- UI form helper is invalid.
- UI form is invalid.
AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15).
Data as JSON: /api/errors/c3081ceb0cf2144d.
Report an issue: GitHub.
Appendix: source
Thrown at GameFramework/UI/UIManager.UIGroup.cs:367
{
uiFormInfo.Covered = true;
uiForm.OnCover();
}
if (!uiFormInfo.Paused)
{
uiFormInfo.Paused = true;
uiForm.OnPause();
}
if (m_CachedNode != null && m_CachedNode.Value.UIForm == uiForm)
{
m_CachedNode = m_CachedNode.Next;
}
if (!m_UIFormInfos.Remove(uiFormInfo))
{
throw new GameFrameworkException(Utility.Text.Format("UI group '{0}' not exists specified UI form '[{1}]{2}'.", m_Name, uiForm.SerialId, uiForm.UIFormAssetName));
}
ReferencePool.Release(uiFormInfo);
}
/// <summary>
/// 激活界面。
/// </summary>
/// <param name="uiForm">要激活的界面。</param>
/// <param name="userData">用户自定义数据。</param>
public void RefocusUIForm(IUIForm uiForm, object userData)
{
UIFormInfo uiFormInfo = GetUIFormInfo(uiForm);
if (uiFormInfo == null)
{
throw new GameFrameworkException("Can not find UI form info.");
}
View on GitHub (pinned to d0c010b051)