When I run my Flex 2 app I get the following runtime error:
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
In other words, the Flex SDK is telling me that the "lb" variable inside my ItemRenderer is null (I checked with debugger and yes, it is really null) What am I doing wrong?
The line which triggers the error is this one: lb.text=value.spe_name;
My tilelist:
<mx:TileList variableRowHeight="true" liveScrolling="false" width="100%" textAlign="left" height="100%" columnCount="2" dataProvider="{model.specialfield_issue_list}" itemRenderer="org.nevis.cairngorm.mod.view.IRCampoEspecial" direction="horizontal"></mx:TileList>
My ItemRenderer simplified soure code:
<?xml version="1.0"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
horizontalAlign="left" verticalAlign="middle"
verticalGap="0" borderStyle="none" width="100%" height="100%"
horizontalScrollPolicy="off" verticalScrollPolicy="off" toolTip="" creationPolicy="all"
>
<mx:Script>
<![CDATA[
import mx.controls.TextArea;
import mx.controls.Text;
import org.nevis.cairngorm.mod.model.ModelLocator;
import mx.core.UIComponent;
import mx.controls.Label;
import mx.controls.ComboBox;
import mx.controls.TextInput;
import utils.Utils;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
[Bindable]
public var model:ModelLocator=ModelLocator.getInstance();
[Bindable]
private var fieldLabelVisible:Boolean = false;
[Bindable]
private var textInputVisible:Boolean = false;
[Bindable]
private var textAreaVisible:Boolean = false;
[Bindable]
private var comboBoxVisible:Boolean = false;
[Bindable]
private var mandatoryLabelVisible:Boolean = false;
public function updata_valor_text(valor:Event):void {
data.value=valor.currentTarget.text;
}
public function updata_valor_combo(valor:Event):void {
data.value=valor.currentTarget.selectedItem.valuesspecialfieldid
}
override public function set data(value:Object):void {
var i:int;
var sel:int;
if (value){
super.data = value;
fieldLabelVisible = true;
lb.text=value.spe_name;
lb.toolTip=value.spe_description;
lb.width=150;
lb.name='etiqueta';
lb.styleName='texto-iza';
} else {
fieldLabelVisible = false;
textInputVisible = false;
textAreaVisible = false;
comboBoxVisible = false;
mandatoryLabelVisible = false;
}
}
]]>
</mx:Script>
<mx:Label id="lb" visible="{fieldLabelVisible}" includeInLayout="{fieldLabelVisible}"/>
<mx:TextInput id="ti" visible="{textInputVisible}" includeInLayout="{textInputVisible}"/>
<mx:TextArea id="ta" visible="{textAreaVisible}" includeInLayout="{textAreaVisible}"/>
<mx:ComboBox id="cb" visible="{comboBoxVisible}" includeInLayout="{comboBoxVisible}"/>
<mx:Label id="mandatory" visible="{mandatoryLabelVisible}" includeInLayout="{mandatoryLabelVisible}"/>
</mx:HBox>
I'm not sure, but I think the SDK that i'm using is 2.0.1 Hotfix 3.
Thanks for your help!
I have come to a solution. What happens in my code is that when I try to acces to my mx components (Label, TextInput, TextArea, etc) they are no created yet. To solve this problem, I have used callLater function as follows:
Hope this helps somebody else!