0

我有NSDictionary一些我想在 a 中显示的参数UITextField。但

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

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

这是抛出的异常:

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

如果我使用

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

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

4

3 回答 3

2
_isNaturallyRTL

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

[userdata objectForKey:@"firstname"]

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

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

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

总而言之,使用

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

反而。

于 2012-07-05T14:35:29.773 回答
2
firstname.text = [[userdata objectForKey:@"firstname"]stringValue];

这有什么区别吗?

于 2012-07-05T14:30:58.733 回答
2

看起来它[userdata objectForKey:@"firstname"]正在返回一个仅包含您所追求的字符串的数组。看看您在哪里设置“名字”的值并将其更改为您所追求的字符串。

于 2012-07-05T14:33:40.800 回答