提问人:sarthak musale 提问时间:9/5/2023 最后编辑:sarthak musale 更新时间:9/5/2023 访问量:102
当列表项的父级未处于活动状态时生成 ObjectDisposedException
ObjectDisposedException generates when the list item's parent is not active
问:
我正在使用 vuforia。OnTargetFound 父对象将被 setActive true,一个列表将填充其子对象的引用,a 将开始将某些计算过程保存在 while 循环和 OnTargetLost 中,该过程将以 stopCoroutine 结束,列表将被清除,父对象将被设置为非活动状态。通过该过程,正在访问列表。
问题在于,即使目标丢失,协程也会自行完成,然后停止。但在此之前,父对象处于非活动状态,并且进程正在访问列表项,“
ObjectDisposedException: SerializedProperty repeatList.Array.data[0] has disappeared!””
正在生成此错误。
我怎样才能摆脱这个问题?? 当标记被跟踪时,该过程必须处于循环中。
我试过: 1.在协程中使用waitForSecond 2.使用break语句(但是过程很长,所以不知道在哪里中断) 3.尝试和捕捉 4.使用标志和条件 5.调用重复 6.使用数组代替列表 7.设置执行顺序 8.使用委托、操作、事件 9.async 等待
代码如下:
private IEnumerator DoCalculation()
{
while (doCalculation)
{
yield return new WaitForSeconds(0.8f);
yield return StartCoroutine(Calculation());
}
}
private IEnumerator Calculation()
{
if (!AreAllOptionsTracked())
{
answerImg.gameObject.SetActive(false);
if (model != null)
{
model.SetActive(false);
}
yield break;
}
isCalculationOn = true;
if (answerObj != null && answerObj.activeInHierarchy)
{
SetRepeatPos();
}
bool isCorrect = CheckOptionOrder();
isCalculationOn = false;
}
private void ClearGame()
{
doCalculation = false;
isCalculationOn = false;
StartCoroutine(ClearAll());
}
private IEnumerator ClearAll()
{
yield return new WaitForSeconds(0.5f);
if (isCalculationOn)
{
yield return new WaitForSeconds(0.7f);
}
if (!isCalculationOn && answerObj != null)
{
answerObj.SetActive(false);
answerObj = null;
}
repeatList.Clear();
}
这里的“answerObj”是父对象,“repeatList”是其子对象的列表。“SetRepeatPos()”正在使用列表项
答: 暂无答案
评论
repeatList