将NSString转换为NSData - [NSString dataUsingEncoding]异常

时间:2012-04-01 18:17:40

标签: iphone json ios5 nsdata

我正在将NSString转换为NSData以便通过JSON解析,但是我收到了以下错误。

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
  reason: '-  [__NSCFDictionary dataUsingEncoding:]: 
  unrecognized   selector sent to instance 0x7987d60'

代码如下:

NSData *data = [str dataUsingEncoding:NSASCIIStringEncoding]; 
//NSUTF8StringEncoding also failed.
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

在我看来,这是因为str包含换行符:'\ n'。

我说错了吗?

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:9)

您的错误表明您尝试将dataUsingEncoding:allowLossyConversion:发送到NSDictionary的实例,该实例不知道如何处理该选择器。确保您的str对象实际上是一个字符串...

答案 1 :(得分:3)

尝试使用NSUnicodeStringEncoding代替NSASCIIStringEncoding。所以更换一行:

NSData *data = [str dataUsingEncoding:NSASCIIStringEncoding]; 

用这个:

NSData *data = [str dataUsingEncoding:NSUnicodeStringEncoding]; 

答案 2 :(得分:0)

我刚用我的样本字符串检查过。 **如果你能给我你的字符串,那么我可以用我的以下示例代码签出。

NSString *msg = [NSString stringWithFormat:@"tell me \"where\"\n"
                  "is\n"
                  "wrong"];
NSData *theData = [msg dataUsingEncoding:NSASCIIStringEncoding];
NSString* theString = [[NSString alloc] initWithData:theData encoding:NSASCIIStringEncoding];

BOOL isValid = [NSJSONSerialization isValidJSONObject:theString];
NSLog(@"Value %d %@",isValid, theString);

对我来说价值即将到来并告诉我“在哪里”