How to wait for all children to load?

I have an OOP sword system, and am having trouble when a player equips the item for the second time.

function Sword:new()
	self.LastSwing = 0
	self.SwingIndex = 1
	
	self.DoingCombo = false
	self.Moving = true
	self.Swung = false
	
	self.SwordsData = SwordData[self.Sword]
	
	self.Model = self.Character:WaitForChild("Item")
	
	print(self.Model.HitAttach)
	print(self.Model:GetFullName())
end

The first time they equip, everything is printed correctly. But when I equip again, I get
HitAttach is not a valid member of Part "Workspace.NinjoOnline.Item"

Unsure why it works the first time but not the second time. Is there a way to wait for all objects to exist?? When I look in workspace, the sword does have the hitattach attachments.

I can’t just do :WaitForChild(“HitAttach”) either, as there are 10+ (depending on sword) so I need all loaded before

This isn’t a loading issue that can be fixed with :WaitForChild(). Something is deleting or parenting the attachments when you re-equip it. Try checking the explorer when you’re playtesting the game and see if the attachments are where they should be.

Have your checked if the HitAttach object is still persistent once you equip the sword again? They may be getting deleted.

Did you check if it’s attached a second time at all?
If it is, I don’t think you can avoid WaitForChild. You said it yourself “a way to wait for all objects to exist”…
If there are dependencies then the wait should be the first thing and then all the rest.