When I add a StringValue with a BoolValue inside in the Workspace, this function is supposed to run in a LocalScript inside the PlayerGui.
Workspace.ChildAdded:connect(function(child)
if child:IsA("StringValue") then
print(child.Name)
print(child:FindFirstChild("BoolValue").Value)
end
end)
It doesn't seem to be working when I set the game to Workspace.FilteringEnabled, and only finds the child, and returns BoolValue as nil (It does work, however when it is not in FilteringEnabled).
UPDATE: I managed to come up with a alternative for now, not sure if there is a simpler one. I added an ObjectValue just to simply store the StringValues and BoolValues so DescendantAdded will only check the ObjectValue.
Workspace.ObjectValue.DescendantAdded:connect(function(child)
if child.Parent.Name == "StringValue" then
print(child.Value) -- Prints the value of BoolValue
print(child.Parent.Value) -- Prints the value of StringValue
end
end)
I'm not sure why this works in FilteringEnabled if you get the instance you want in the parent's instance.

5 comments
I think you're referring to StreamingEnabled. FilteringEnabled basically sets the PlayerGui as client-sided only.
Yes, my bad. I was totally unaware of that feature. So much time without reading the API. So that basically disables clients changes replicating to the server. Maybe FindFirstChild needs to write on the server for it to work. I'm going to try to reproduce the error and try to fix it.
I got to work by using DescendantAdded and getting the BoolValue first and getting the String by parenting. Not sure why it works like that though.
Yeah. It has something to do with the client reading the value. I reproduced the error. When tried the same script on the server it worked just fine.
Fixed it replacing FindFirstChild with WaitForChild. My guess is that with FilteringEnabled there's a delay added in the server replicating the Instance to the client maybe its doing some check. So we were trying to read a value that wasn't replicated yet.