Activating a prefab in the scene by find it over a tag?

Hello everyone,
i want to activating a prefab. To do this i want to use a tag, to find the GameObject and then use SetActive(true) to set set it active. I tried this code but it doesnt work.

    private int ActiveCannon;
    public GameObject Cannon1;
    public GameObject Cannon2;
    public GameObject Cannon3;
    public GameObject Cannon4;
    public GameObject Cannon5;
    public GameObject Cannon6;
    void Start () {
    ActiveCannon = PlayerPrefs.GetInt("ActiveCannon");

            if (ActiveCannon == 1)
                Cannon1 = GameObject.FindWithTag("Cannon1");
            if (ActiveCannon == 2)
                Cannon2 = GameObject.FindWithTag("Cannon2");
            if (ActiveCannon == 3)
                Cannon3 = GameObject.FindWithTag("Cannon3");
            if (ActiveCannon == 4)
                Cannon4 = GameObject.FindWithTag("Cannon4");
            if (ActiveCannon == 5)
                Cannon5 = GameObject.FindWithTag("Cannon5");
            if (ActiveCannon == 6)
                Cannon6 = GameObject.FindWithTag("Cannon6");
            }   }

Sorry for my bad english.

I believe FindWithTag only returns active gameobjects so you would need to store a reference to your cannons somewhere and activate from that.

I would suggest you make a List in a manager somewhere and have the cannons add themselves to it on start. You can then just active an index in that List.