Assertion failed: Assertion failed on expression: 'IsActive() || GetRunInEditMode()' What does this mean?

I am using the code below and although it works perfectly i get this error whenever i press the button on my keyboard. Is this a bug of the engine or something wrong with my code?

private void OnGUI()
    {
        if (pistol_button)
        {
            if(GUI.Button(new Rect(20, Screen.height - 50, 100, 50), "1. Pistol") || Input.GetKeyDown(KeyCode.Alpha1))
            {
                child1.SetActive(true);
                child2.SetActive(false);
            }
        }
        if (shotgun_button)
        {
            if(GUI.Button(new Rect(140, Screen.height - 50, 100, 50), "2. Shotgun") || Input.GetKeyDown(KeyCode.Alpha2))
            {
                child2.SetActive(true);
                child1.SetActive(false);
            }
        }
    }

This seems to happen when calling SetActive() in the OnGUI() function.
You could call SetActive() in Update() instead, or delay the deactivation till the end of the frame using a coroutine:

    private void OnGUI()
    {
        ...
        StartCoroutine( SetActiveLater(false) );
        ...
    }

    private IEnumerator SetActiveLater(bool value)
    {
        yield return null;
        gameObject.SetActive( value );
    }

By delaying activations and deactivations till the next coroutine call, you won’t get OnGUI being called in strange orders where your state has not fully propagated through (like where a dependent thing has it’s OnGUI called first, then gets deactivated.)