Swift - 无法从UITextField获取真实文本 - 取得NCIStr结果

7
我有一个在Storyboard中打了"Secure Text Entry"勾选的UITextField。
当我将UITextField.text属性的文本分配给变量时,我得到的值是:class name = _NSClStr,而不是实际文本值ABCD
如果我在Storyboard中取消“Secure Text Entry”并做同样的分配,我会得到真实的文本。
分配值的代码很简单:
passFieldText = self.passField.text!

当启用安全输入时,调试器输出如下:
(lldb) print passFieldText
(String) $R0 = class name = _NSClStr

当禁用安全输入时,调试器的输出如下:
(lldb) print passFieldText
(String) $R0 = "ABCD"

我尝试使用本地变量代替类变量: ```

我甚至试图使用本地变量代替类变量:

```
let passFieldText = self.passField.text ?? ""

相同的结果!

(lldb) print passFieldText
(String) $R0 = class name = _NSClStr

passFieldText被传递到另一个函数以验证密码,在该函数中它还显示了一个类名为 _NSClStr的值。

我错过了什么吗?

干杯!


1
当你写下 print("password: \(passField.text ?? "")") 时会发生什么?调试器并不总是显示正确的值。 - Dominik 105
你可以分享更多的代码吗?我进行了一项快速测试,结果符合预期。不过,你能否对UITextField的设置方式做些调整呢? - TheAppMentor
所以这很有趣/奇怪。如果我在代码中放置print(),我会得到我期望的正确值。如果我从调试窗口打印,我会得到_NSClStr的东西。 - TJ Asher
2个回答

2
我遇到了相同的问题,唯一解决方法是插值字符串:
password = "\(self.passField.text)"

这并不仅限于print()函数。


0
所以我的问题的原因并不是密码字段中的文本。事实证明这是一个与外部服务有关的问题。
然而,为了帮助其他人在代码中查看其密码字段的实际值,我将分享Dominik 105提出的建议以及我是如何实施的。
如果我在代码中加入PRINT语句,就可以看到密码字段的实际值。
print("password1: \(self.passField.text ?? "")")

给我了我期望的结果

ABCD

如果我在调试器输出中执行相同的PRINT操作,我会看到_NSClStr的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接