NSDictionary 元素到 UITextfield

Posted

技术标签:

【中文标题】NSDictionary 元素到 UITextfield【英文标题】:NSDictionary element to UITextfield 【发布时间】:2012-07-05 14:27:31 【问题描述】:

我有一个NSDictionary,其中包含一些我想在UITextField 中显示的参数。但是

firstname.text = [userdata objectForKey:@"firstname"];

抛出异常。如果我在[userdata objectForKey:@"firstname"]; 上使用 NSLog,它会显示正确的值。

这是抛出的异常:

2012-07-05 15:55:56.533 项目[13642:f803] -[__NSArrayM _isNaturallyRTL]:无法识别的选择器发送到实例 0x68c4e20 2012-07-05 15:55:56.534 Project[13642:f803] *** 由于应用程序终止 未捕获的异常'NSInvalidArgumentException',原因:'-[__NSArrayM _isNaturallyRTL]: 无法识别的选择器发送到实例 0x68c4e20'

如果我使用

firstname.text = [NSString stringWithFormat:@"%@",[userdata objectForKey:@"firstname"]];

它可以工作,但它会将值放在括号中。 这里似乎有什么问题?为什么第一次尝试不起作用?

【问题讨论】:

您是否 100% 确定当您更改第一次尝试时,它会起作用?基本上,你确定错误就在那一行吗? 调试时会在该行抛出异常 【参考方案1】:
_isNaturallyRTL

是一个未记录的 NSString 方法。看来

[userdata objectForKey:@"firstname"]

是一个 NSMutableArray (从类名猜测),您试图将其用作字符串。当您使用带有 %@ 格式说明符的格式字符串时,它会调用要格式化/打印的对象的 -description 方法(NSLog 也是如此),并且 NSArray 的描述是一个 NSString,看起来像

[ "description of first element", "description of second element" ]

等等,这就是为什么它将您的文本放在括号中但不会崩溃的原因。

总而言之,使用

[[userdata objectForKey:@"firstname"] objectAtIndex:0]

改为。

【讨论】:

就是这样,我确定该数组中只有 1 个元素,但我忘记调用该元素.... 非常感谢您【参考方案2】:
firstname.text = [[userdata objectForKey:@"firstname"]stringValue];

这有什么不同吗?

【讨论】:

【参考方案3】:

[userdata objectForKey:@"firstname"] 似乎正在返回一个仅包含您所追求的字符串的数组。看看你在哪里设置了“firstname”的值,然后把它改成你要的字符串。

【讨论】:

我通过 Json 从数据库中获取 NSDictionary,是的,它只包含 1 个字符串“firstname”

以上是关于NSDictionary 元素到 UITextfield的主要内容,如果未能解决你的问题,请参考以下文章

NSDictionary 与 NSArray 正在转换为元素数组,同时使用 AfNetworking 2 将数据发布到 PHP

如何使用保留关键字访问 NSDictionary 元素?

NSDictionary - 需要获取关键子元素的值

如何获取 NSDictionary 中的第一个元素?

从 NSDictionary 获取 JSON 子元素

来自 xml 的 NSDictionary 元素