2013-10-07 56 views
-1

如果选择了ColorDataGrid中的“开发人员行”框之一,然后调用下面显示的ExtractProjectPopup.mxml中的updateDeveloper()方法,则会发生此错误。VerifyError:错误#1023:addItem发生ArrayCollection时发生堆栈溢出

public function updateDeveloper():void 
{ 
    developerIndexArray:ArrayCollection = new ArrayCollection(); 
    var devObject:Object = new Object(); 
    var ObjectString:String = developerIndexArray.toString(); 
    if(developerGrid.selectedIndex >= 0) 
    { 
     var developer:ExtractPopUpDeveloperRow = this.developerRows.getItemAt(developerGrid.selectedIndex) as ExtractPopUpDeveloperRow; 
     developer.isPartOfProject = ! developer.isPartOfProject; 
     if(developer.isPartOfProject) 
     { 
     devObject.index = developerGrid.selectedIndex; 
     viewResumeButton.visible = true; 
     developerIndexArray.addItem(devObject);  
     } 
    } 
} 

我目前使用Flex SDK 3.6,我知道已知bug其解决方法(添加跟踪语句)不会在这种情况下,真正的帮助的。我怀疑当我添加对象被添加到ArrayCollection时发生溢出,但我不知道为什么。

必须有某种递归迫使溢出,我错过了什么?

这里的堆栈跟踪导致溢出:

[mpt.project::ExtractProjectPopUp~[O] Object~[A] int[I] int[I] mpt.vo.extraction::ExtractPopUpDeveloperRow[O] String[S] int[I]] {mpt.project::ExtractProjectPopUp~[O]} (mx.collections::ArrayCollection[O] int[I]) 
60:callproperty getItemAt 1 
        [mpt.project::ExtractProjectPopUp~[O] Object~[A] int[I] int[I] mpt.vo.extraction::ExtractPopUpDeveloperRow[O] String[S] int[I]] {mpt.project::ExtractProjectPopUp~[O]} (Object[A]) 
64:getlex 7044 
        [mpt.project::ExtractProjectPopUp~[O] Object~[A] int[I] int[I] mpt.vo.extraction::ExtractPopUpDeveloperRow[O] String[S] int[I]] {mpt.project::ExtractProjectPopUp~[O]} (Object[A] mpt.vo.extraction::ExtractPopUpDeveloperRow$[O]) 
67:astypelate 
        [mpt.project::ExtractProjectPopUp~[O] Object~[A] int[I] int[I] mpt.vo.extraction::ExtractPopUpDeveloperRow[O] String[S] int[I]] {mpt.project::ExtractProjectPopUp~[O]} (mpt.vo.extraction::ExtractPopUpDeveloperRow[O]) 
68:coerce mpt.vo.extraction::ExtractPopUpDeveloperRow 
        [mpt.project::ExtractProjectPopUp~[O] Object~[A] int[I] int[I] mpt.vo.extraction::ExtractPopUpDeveloperRow[O] String[S] int[I]] {mpt.project::ExtractProjectPopUp~[O]} (mpt.vo.extraction::ExtractPopUpDeveloperRow[O]) 
71:dup 
        [mpt.project::ExtractProjectPopUp~[O] Object~[A] int[I] int[I] mpt.vo.extraction::ExtractPopUpDeveloperRow[O] String[S] int[I]] {mpt.project::ExtractProjectPopUp~[O]} (mpt.vo.extraction::ExtractPopUpDeveloperRow[O] mpt.vo.extraction::ExtractPopUpDeveloperRow[O]) 
72:dup 

Warning: Failed to parse corrupt data. 
VerifyError: Error #1023: Stack overflow occurred. 

at mpt.project::ExtractProjectPopUp/__developerGrid_click() 

谢谢所有帮助。

+0

由堆栈判断我甚至不认为它到达'developerIndexArray.addItem'。它似乎与'this.developerRows.getItemAt'有关。如'astypelate'所示,还有一个后期绑定,可以创建递归,如“72:dup”所示。虽然,我真的不知道什么'developerRows'成员和'ExtractPopUpDeveloperRow'类真的是。此外,您的AS3似乎是一个片段(即它具有*神秘*变量的不完整性),尽管您没有另外描述。 – zamnuts

回答

0

奇怪的是,这个问题是由语句

var developer:ExtractPopUpDeveloperRow = this.developerRows.getItemAt(developerGrid.selectedIndex) as ExtractPopUpDeveloperRow; 

这不是一个解决方案,但只是一种变通方法后添加一个空的跟踪语句解决。