OnTriggerExit is not fires but OnTriggerEnter does fire

public class CollisionSystem : MonoBehaviour
{
public bool isTouching = false;

public void OnTriggerEnter(Collider col)
{
    if (col.gameObject.layer == LayerMask.NameToLayer("Building") ||
        col.gameObject.layer == LayerMask.NameToLayer("Obstacles"))
    {
        isTouching = true;
        Debug.Log("true");
    }
    Debug.Log("OnTriggerEnter");
}

public void OnTriggerExit(Collider col)
{
    if (col.gameObject.layer == LayerMask.NameToLayer("Building") ||
        col.gameObject.layer == LayerMask.NameToLayer("Obstacles"))
    {
        isTouching = false;
    }

    isTouching = false; //delete
    Debug.Log("OnTriggerExit");
}

}

I use this script to detect triggers for my city builder game but even though OnTriggerEnter works fine OnTriggerExit does not fire. Both objects have rigidbody, are not kinematic, layers are set and is Trigger selected. What am I doing wrong?

After 2 days of searching, I realized that I destroyed and replaced my object with a new one every frame and that caused to only OnTriggerEnter work every frame. If you are new like me and want to move objects around don’t destroy the object instead just give it a new location. That’s actually so simple I feel stupid :D.
This is my new code ==
if (currentBuilding == null)
{
GameObject currentBuildingPrefabs = buildingPrefabs[currentBuildingIndex];
currentBuilding = Instantiate(currentBuildingPrefabs, targetPosition, silhouetteRotation);
}
else
{
currentBuilding.transform.position = targetPosition;
}