I have a price of code that looks like this:

    void OnTriggerExit() {
     Debug.Log("Object leaved trigger");
    }

But when I move an object that is colliding with the trigger by script it doesn't print to the console, but if i nudge it instead it does. I'm guessing it's because the object ain't actually exiting, but disappearing. Is there a way to solve this?
Thank you!

**EDIT:**  
Okey, so this is the actual code:  
Craftingstation.cs
======

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class Craftingstation : MonoBehaviour {
    
    	//GameObject globalScripts;
    
    	bool itemAlreadyCraftable;
    	int correctItems;
    
    	public string[,] itemIds;
    	// Generic list for holding items on crafter
    	public List<string> itemsOnCrafter;
    	public List<string> craftableItems;
    	// Static 2D array for holding crafting recipes
    	string[,] craftingRecipes = new string[,] {
    		// {recipe},{result}
    		{"potato","tabasco"},{"explosivePotato"},
    		{"mentos","cola"},{"colaCannon"},
    		{"potato","cola"},{"potatoCola"},
    		{"potato","chips"},{"potatoChips"}
    	};
    
    	void Start () {
    		//globalScripts = GameObject.FindGameObjectWithTag("Global Scripts");
    		//string test = globalScripts.GetComponent<items>().nameToId("mentos");
    	}
    
    	/*
    	void nameToId(string passedName) {
    		for (int i = 0; i < globalScripts.GetComponent<items>().itemIds.GetLength(0); i++)
    		{
    			string loopedName = globalScripts.GetComponent<items>().itemIds[i, 0];
    			if (loopedName == passedName) {
    				string returnString = globalScripts.GetComponent<items>().itemIds[i, 1];
    				Debug.Log(returnString);
    			}
    		}
    		return 0;
    	}
    	*/
    
    	void Update () {
    		for (int i = 0; i < craftingRecipes.GetLength(0); i++) {
    			itemAlreadyCraftable = false;
    			correctItems = 0;
    			if (i%2==0) {
    				for (int j = 0; j < craftingRecipes.GetLength(1); j++) {
    					for (int k = 0; k < itemsOnCrafter.Count; k++) {
    						if (itemsOnCrafter[k] == craftingRecipes[i, j]) {
    							correctItems++;
    						}
    					}
    					if (correctItems >= craftingRecipes.GetLength(1)) {
    						for (int l = 0; l < craftableItems.Count; l++) {
    							if (craftableItems[l] == craftingRecipes[i+1, 0]) {
    								itemAlreadyCraftable = true;
    							}
    						}
    						if (itemAlreadyCraftable == false) {
    							craftableItems.Add(craftingRecipes[i+1, 0]);
    						}
    					}
    					else {
    						craftableItems.Remove(craftingRecipes[i+1, 0]);
    					}
    				}
    			}
    		}
    	}
    
    	void OnTriggerEnter(Collider other) {
    		itemsOnCrafter.Add(other.GetComponent<id>().technicalName);
    	}
    	void OnTriggerExit(Collider other) {
    		itemsOnCrafter.Remove(other.GetComponent<id>().technicalName);
    	}
    }

sendRay.cs
======

    using UnityEngine;
    using System.Collections;
    
    public class sendRay : MonoBehaviour {
    
    	Ray ray;
    	RaycastHit hit;
    	bool holding = false;
    	public bool pickedUp = false;
    	Vector3 tempScale;
    
    
    	void Update()
    	{
    		if(Input.GetButtonDown("Pickup"))
    		{
    			Vector2 screenCenterPoint = new Vector2(Screen.width/2, Screen.height/2);
    			ray = Camera.main.ScreenPointToRay(screenCenterPoint);
    
    			if(Physics.Raycast(ray, out hit, 5))
    			{
    				if(hit.transform.tag == "Pickup") {
    					if(holding == false) {
    						pickedUp = true;
    						tempScale = hit.transform.localScale;
    						hit.transform.parent = GameObject.FindGameObjectWithTag("Hand").transform;
    						float distX = hit.transform.GetComponent<keepOffset>().distX;
    						float distY = hit.transform.GetComponent<keepOffset>().distY;
    						float distZ = hit.transform.GetComponent<keepOffset>().distX;
    						//Debug.Log(distX + ", " + distY + ", " + distZ);
    						hit.transform.localPosition = new Vector3(-distZ, -distX, -distY);
    						hit.transform.localScale = tempScale;
    						hit.transform.rotation = GameObject.FindGameObjectWithTag("Hand").transform.rotation;
    						foreach(Collider c in hit.transform.GetComponents<Collider>()) {
    							c.enabled = false;
    						}
    						foreach(Rigidbody r in hit.transform.GetComponents<Rigidbody>()) {
    							r.isKinematic = true;
    							r.detectCollisions = false;
    						}
    						holding = true;
    						return;
    					}
    				}
    			}
    			if(holding == true) {
    				pickedUp = false;
    				foreach (Transform child in GameObject.FindGameObjectWithTag("Hand").transform){
    					child.transform.parent = null;
    					child.transform.localScale = tempScale;
    					foreach(Collider c in child.transform.GetComponents<Collider>()) {
    						c.enabled = true;
    					}
    					foreach(Rigidbody r in child.transform.GetComponents<Rigidbody>()) {
    						r.isKinematic = false;
    						r.detectCollisions = true;
    					}
    				}
    				holding = false;
    				return;
    			}
    		}
    	}
    }