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

6

我正在将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];

我认为这是因为字符串中包含了换行符“\n”。

我的理解正确吗?

请有人帮我解决这个问题好吗?


你能告诉我你的字符串吗? - Praveen-K
我检查了我的代码,它在包含 \n 的示例字符串中运行良好。 - Praveen-K
3个回答

9

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


你是对的。这是我的错误。str对象实际上是NSDictionary,就像这个错误所说的:[__NSCFDictionary dataUsingEncoding:] - Jun
@Harry 你是怎么解决的?能否请你提一下。非常感谢。 - Taimur Ajmal
@TaimurAjmal 你只需要将你的字典对象转换成字符串,像这样 - NSString* json = [NSString stringWithFormat:@"%@", responseObject]; 然后使用它,就不会出现异常了。 - Pankaj Bhardwaj

3
尝试使用NSUnicodeStringEncoding代替NSASCIIStringEncoding。因此,将该行替换为:
NSData *data = [str dataUsingEncoding:NSASCIIStringEncoding]; 

使用这个方法:

NSData *data = [str dataUsingEncoding:NSUnicodeStringEncoding]; 

3
这不是一个恰当的回答。你需要在回答中增加更多细节。 - Parth Bhatt

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);

对我来说,这个值是0,并告诉我“哪里”出了问题。

错误的。


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