我有一个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"]];


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

最佳答案

_isNaturallyRTL


是一个未公开的NSString方法。看起来

[userdata objectForKey:@"firstname"]


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

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


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

总而言之,使用

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


代替。

关于ios - UITextfield的NSDictionary元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11346422/

10-10 20:06