Starter GUI: https://ibb.co/Pg00C8h

PlayerGUI Before Death: https://ibb.co/G5tbBHw

PlayerGUI After Death: https://ibb.co/7r64460

Error: https://ibb.co/Vgxk990

I am making an inventory system very similar to the one in Soybeen's "Booga Booga". It works how I want it to so far but when I respawn, I get an error that the TextLabel that display the item and # of items that is inside of the image button does not exist.

To be clear; the Inventory system seems to work perfectly fine after respawn. The amount of Grass and Wood that I have is correctly displayed as I drop stuff. The TextLabel changes it's text when I want it to even when I get the error.

Local Script:

userInputService = game:GetService("UserInputService")
player = game.Players.LocalPlayer
playerGUI = player:WaitForChild("PlayerGui")
inventoryHolderGui = playerGUI:WaitForChild("InventoryScreenGui"):WaitForChild("InventoryHolderFrame")
inventoryMainFrame = inventoryHolderGui:WaitForChild("InventoryFrame")
inventoryContents = player:WaitForChild("Inventory"):GetChildren()
inventoryButtons = inventoryMainFrame:GetChildren()
isInventoryOpen = false
mb1Debounce = false
mb2Debounce = false
--Remote Functions (not relevant to the GUI problem)
dropRequest = game.ReplicatedStorage.DropRequest 
imageButtonActivated = game.ReplicatedStorage.InventoryImageButtonActivate

--Refresh all this stuff on respawn
player.CharacterAdded:Connect(function(char)
	inventoryHolderGui = playerGUI:WaitForChild("InventoryScreenGui"):WaitForChild("InventoryHolderFrame")
	inventoryMainFrame = inventoryHolderGui:WaitForChild("InventoryFrame")
	inventoryContents = player:WaitForChild("Inventory"):GetChildren()
	inventoryButtons = inventoryMainFrame:GetChildren()
end)

userInputService.InputBegan:Connect(function(input,gameProcessed)
	if input.KeyCode == Enum.KeyCode.C and isInventoryOpen == false then
	inventoryHolderGui = playerGUI:WaitForChild("InventoryScreenGui"):WaitForChild("InventoryHolderFrame")
	inventoryMainFrame = inventoryHolderGui:WaitForChild("InventoryFrame")
	inventoryContents = player:WaitForChild("Inventory"):GetChildren()
	inventoryButtons = inventoryMainFrame:GetChildren()
		inventoryHolderGui.Visible = true
		isInventoryOpen = true
		for i,v in pairs(inventoryContents) do
			for o,b in pairs(inventoryButtons) do
				if b.Name == v.Name then
					if v.Value > 0 then	
						b.Visible = true
						b.AmountDisplay.Text = v.Name .. " : " .. tostring(v.Value)
						b.MouseButton2Down:Connect(function()
							if mb2Debounce == false then
								mb2Debounce = true
								dropRequest:FireServer(v)
							end
						end)
						b.MouseButton2Up:Connect(function()
							if mb2Debounce == true then
								mb2Debounce = false
							end
						end)
						b.MouseButton1Down:Connect(function()
							if mb1Debounce == false then
								mb1Debounce = true
								imageButtonActivated:FireServer(v)
							end	
						end)
						b.MouseButton1Up:Connect(function()
							if mb1Debounce == true then
								mb1Debounce = false
							end
						end)
						v.Changed:Connect(function(value)
							if value > 0 then
								b.Visible = true
								b.AmountDisplay.Text = v.Name .. " : " .. tostring(v.Value)
							elseif value <= 0  then
								value = 0
								b.Visible = false
							end
						end)
					elseif v.Value <= 0 then
						b.MouseButton2Down:Connect(function()
							dropRequest:FireServer(v)
							--This creates a brick on the server and reduces v.Value by 1
						end)
						b.MouseButton1Down:Connect(function()
							imageButtonActivated:FireServer(v)
							--Reduces value by 1 on server
						end)
						v.Changed:Connect(function(value)
							if value > 0 then
								b.Visible = true
								b.AmountDisplay.Text = v.Name .. " : " .. tostring(v.Value)
							elseif value <= 0  then
								value = 0
								b.Visible = false
							end	
						end)
					end
				end
			end
		end
	elseif input.KeyCode == Enum.KeyCode.C and isInventoryOpen == true then
		inventoryHolderGui.Visible = false
		isInventoryOpen = false
	end
end)