textLayout在快速输入清除时报错解决方法

var tf:TextFlow;

var len:int = tf.numChildren;
for (var i:int = 0; i < len; i += 1)
{
  tf.removeChildAt(0);
}

tf.flowComposer.composeToPosition();
tf.flowComposer.updateAllControllers();

TypeError: Error #1009: 无法访问空对象引用的属性或方法。
 at flashx.textLayout.edit::ParaEdit$/insertText()       flashx extLayouteditParaEdit.as:54]
 at flashx.textLayout.operations::InsertTextOperation/doInternal()   flashx extLayoutoperationsInsertTextOperation.as:196]
 at flashx.textLayout.operations::InsertTextOperation/doOperation()   flashx extLayoutoperationsInsertTextOperation.as:223]
 at flashx.textLayout.edit::EditManager/doInternal()       flashx extLayouteditEditManager.as:723]
 at flashx.textLayout.edit::EditManager/doOperation()      flashx extLayouteditEditManager.as:603]
 at flashx.textLayout.edit::EditManager/flushPendingOperations()    flashx extLayouteditEditManager.as:873]
 at flashx.textLayout.compose::StandardFlowComposer/updateToController()  flashx extLayoutcomposeStandardFlowComposer.as:554]
 at flashx.textLayout.compose::StandardFlowComposer/updateAllControllers() flashx extLayoutcomposeStandardFlowComposer.as:517]


tf.interactionManager.selectRange(tf.textLength, tf.textLength);

TypeError: Error #1009: 无法访问空对象引用的属性或方法。
 at flashx.textLayout.edit::ParaEdit$/insertText()       flashx extLayouteditParaEdit.as:54]
 at flashx.textLayout.operations::InsertTextOperation/doInternal()   flashx extLayoutoperationsInsertTextOperation.as:196]
 at flashx.textLayout.operations::InsertTextOperation/doOperation()   flashx extLayoutoperationsInsertTextOperation.as:223]
 at flashx.textLayout.edit::EditManager/doInternal()       flashx extLayouteditEditManager.as:723]
 at flashx.textLayout.edit::EditManager/doOperation()      flashx extLayouteditEditManager.as:603]
 at flashx.textLayout.edit::EditManager/flushPendingOperations()    flashx extLayouteditEditManager.as:873]
 at flashx.textLayout.compose::StandardFlowComposer/internalCompose()  flashx extLayoutcomposeStandardFlowComposer.as:711]
 at flashx.textLayout.compose::StandardFlowComposer/composeToPosition()  flashx extLayoutcomposeStandardFlowComposer.as:837]

报错在ParaEdit.as,sibling为null
   var sibling:FlowElement = textFlow.findLeaf(absoluteStart);
   var siblingIndex:int;
   var paragraph:ParagraphElement = sibling.getParagraph();

问题貌似是因为EditManager.as里insertText方法中的Event.ENTER_FRAME,这个下一帧处理好像会导致快速输入删除时候的不同步
    if (captureLevel == 0 && origOperationState == null && controller && controller.container && allowDelayedOperations)
    {
     enterFrameListener = controller.container;
     enterFrameListener.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 1.0, true);
    }
    else
     flushPendingOperations();

我的解决方法是同步处理 不让他下一帧处理 设置 EditManager(tf.interactionManager).allowDelayedOperations = false;

问题解决 具体为什么 还不是很清楚,先这么用着吧,如果有大神知道,希望可以交流

原文地址:https://www.cnblogs.com/xbglbc/p/3813498.html