преобразование NSString в NSData - исключение [NSString dataUsingEncoding] - PullRequest
6 голосов
/ 01 апреля 2012

Я преобразовывал 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 ]

9 голосов
/ 01 апреля 2012

Ваша ошибка говорит о том, что вы пытаетесь отправить dataUsingEncoding:allowLossyConversion: в экземпляр NSDictionary, который не знает, что делать с этим селектором. Убедитесь, что ваш str объект на самом деле является строкой ...

3 голосов
/ 01 апреля 2012

Попробуйте использовать NSUnicodeStringEncoding вместо NSASCIIStringEncoding. Поэтому замените строку:

NSData *data = [str dataUsingEncoding:NSASCIIStringEncoding]; 

с этим:

NSData *data = [str dataUsingEncoding:NSUnicodeStringEncoding]; 
0 голосов
/ 01 апреля 2012

Я только что проверил образец строки.** Если бы вы могли дать мне вашу строку, то я мог бы проверить с помощью моего следующего примера кода.

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 и сказать мне "где"

это

неправильно

...