GameObject not destroyed

I use Roll a Ball video tutorial from unity. In tutorial the pickup objects are spread on the plane manually. I tried to make a GameController script, to put the pickup objects programmatically and I attached it to a GameObject namedd GameControler (with tag as GameController). Here is the code:

     using UnityEngine;
    using System.Collections;

    public class GameController : MonoBehaviour {
public GameObject pickupObj;
GameObject parentPickup;

void Start () {
	parentPickup = GameObject.Find ("Pickups");
	BuildLevel();
}

void BuildLevel(){
	int i;
	float x, y, z;

	for(i=0; i<360; i += 30){
		x = 5*Mathf.Cos (i*Mathf.Deg2Rad);
		y = 1f;
		z = 5*Mathf.Sin (i*Mathf.Deg2Rad);
		GameObject gObj = Instantiate(pickupObj, new Vector3(x, y, z), Quaternion.identity) as GameObject;
	gObj.transform.parent = parentPickup.transform;
	}
      }
      }

The problem is, when the sphere collides with a pickup object created programmatically, the pickup object is not destroy. If I put manually a pickup object (like in the tutorial) , the object is destroyed.
In both cases the object is prefab and i assigned the GameObject pickupObj.

Why the programmatically object is not destoyed ?
How to solve the problem ?

Check the objects in the scene when you run it. As you are not specifying the name of the objects when you instantiate them you’ll probably find they have (Clone) after them.

This means that if (col.gameObject.name == "Pickup"){ is going to be false.

What you should do instead is tag all of your pickup objects as “Pickup” and then use if (col.gameObject.tag== "Pickup"){

Checking the name of an object is not a good idea unless that object is unique. You could use gObj.name = "Pickup"; after the instantiate but is is probably better just to check the tag, that’s what they are for. Otherwise every object has to be called the same thing for it to work and that can get confusing.

@Fredex8 The code with Destroy() :

  using UnityEngine;
  using System.Collections;
  using UnityEngine.UI;

   public class PlayerController : MonoBehaviour {
private Rigidbody rb;
public float speed = 100;
private int count;
public Text countText;
public Text winText;

private GameObject[] allPickups;
// Use this for initialization
int cntPickup;

void Start () {
	rb = GetComponent<Rigidbody>();
	count = 0;
	cntPickup = 0;
	SetCountText ();
	allPickups = GameObject.FindGameObjectsWithTag("aPickup");
	cntPickup = allPickups.Length;
	winText.text = "";
}

void FixedUpdate(){
	float horz = Input.GetAxis ("Horizontal");
	float vert = Input.GetAxis ("Vertical");
	Vector3 movement = new Vector3(horz, 0f, vert);
	rb.AddForce(movement * speed);
}

void OnCollisionEnter(Collision col){
	if (col.gameObject.name == "Pickup"){
		Destroy (col.gameObject);
		count++;
		cntPickup--;
		SetCountText ();
		if (cntPickup == 0)
		{
			winText.text = "You Win !";
		}
	}
}

void SetCountText(){
	countText.text = "Count : " + count.ToString();
}
   }