Why won't my coroutine start?

I have a script which uses iTween to display experience gained from an enemy which is kicked off by a health script attached to the enemy. Here are the relevant parts of the script:

EnemyHealth.js attached to enemy - this happens upon death

    var aRotation = Quaternion.Euler(0 , 0 , 0);
    Instantiate(xpText, transform.position, aRotation);


XPText.js (attached to a 3DText prefab called XPText)

function DisplayXP()

    yield WaitForSeconds(1);
    GetComponent(TextMesh).text = textContent;
    iTween.FadeTo(gameObject, 1, 0.5);
    yield WaitForSeconds(2);
    iTween.FadeTo(gameObject, 0, 0.5);

    yield WaitForSeconds(1);


function ChangeText(valueA)
    textContent = valueA.ToString() + "XP";

Please note that Network.Instantiate is intentional.

When I kill an enemy I get the following error:

"Coroutine couldn't be started because the the game object 'XPText' is inactive!"

So I removed the "yield WaitForSeconds" lines but then I get the error:

Destroying assets is not permitted to avoid data loss. If you really want to remove an asset use DestroyImmediate (theObject, true); UnityEngine.Object:Destroy(Object)

Any ideas how what I've done wrong or any way around this?

You're trying to start the coroutine on the prefab, not the instantiated object

Try something like this:

var instantiated = Instantiate(xpText, transform.position, aRotation);

Just a quick thought: If the XPText it refers to is on this line:

Instantiate(xpText, transform.position, aRotation);

then make sure xpText is active by either setting .active = true or checking the box on it in the Inspector.