I tracked down a bug where assigning a string table reference to an instance-editable FText reverts to None. It only happens when the referenced entry’s source string is empty. Since the string table picker auto-assigns the first key in the table when you select one, any table whose first entry has an empty source looks completely unselectable: you pick the table and the property just snaps back to None.
It only happens when the FText lives on a component of a Blueprint actor and is edited on a placed instance. Actor-level BP variables and native actors keep the same reference fine.
What I think is going on: the property set itself succeeds and the value dies afterward. PostEditChange on the placed actor reruns construction scripts, which rebuilds the component and round-trips the instance-edited properties through the instance data cache. During that diff, the null-default overload of FTextProperty::Identical treats any FText with an empty display string as identical-to-default (it effectively returns GetDisplayString(A).IsEmpty()), so the freshly assigned reference looks unchanged-from-default and gets dropped. That’s consistent with actor-level variables and native actors surviving — they don’t go through the construction-script instance-diff path. The auto-pick behavior comes from STextPropertyEditableTextBox.cpp (“Just use the first key”).
The annoying part is that an empty source string is legitimate data (placeholders, entries pending translation) and the namespace/key identity is meaningful regardless of what the string resolves to. The loss is silent (no warning, the value just reverts), and when the empty entry happens to sort first in the table, the whole table looks broken in the picker. That’s how our content team first hit it.
We already have workarounds in place for this (like setting the text somewhere else, copying the value, and pasting into the component), but I believe this is a bug that should be addressed.