InitWithData NSString: кодировка: тип возвращаемого значения - PullRequest
2 голосов
/ 03 декабря 2008

У меня есть пара строк тривиального кода, таких как:

NSData *dataReply;
NSString *stringReply;
dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
stringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];

Проблема здесь в том, что initWithData: encoding: не возвращает экземпляр NSString, как утверждается в документации. Я попытался сделать явное приведение с использованием (NSString *), но без особой удачи. Это дает мне предупреждения компилятора, когда я пытаюсь передать stringReply методу, который я написал с несоответствиями типов. Учитывая, что я воспринимаю все предупреждения как ошибки, мне бы очень хотелось понять, что и как возвращает stringReply, и как я могу заставить его иметь тип NSString.

Ответы [ 2 ]

8 голосов
/ 04 декабря 2008

«Несоответствие типов» от компилятора, когда вы пытаетесь использовать stringReply в другом месте, не имеет ничего общего с объектом, возвращаемым из initWithData: encoding: и всем, что связано с тем, где впоследствии используется stringReply.

Например, если вы получаете несоответствие типов при этом:

SomeClass *someObject;
NSString *stringReply;
stringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];
[someObject methodWithString:stringReply];

Проблема в не , что initWithData: encoding: возвращает неправильный тип, но один из:

  • methodWithString: фактически не принимает NSString *
  • methodWithString: неправильно объявлен / включен перед использованием

Второй вариант часто может возникнуть, если SomeClass заранее объявлен в заголовочном файле (как @class SomeClass), но никогда впоследствии не включен в файл реализации.

0 голосов
/ 03 декабря 2008

Не совсем уверен, что происходит, я запустил приведенный ниже код и получил NSString. Переключение данных с помощью nil также работает нормально.

const char* os = "12345";
NSString* str = [[NSString alloc] initWithData:[NSData dataWithBytes:os length:5 ] encoding:NSUTF8StringEncoding];  
NSLog(@"%@", str);

Если вы отлаживаете, можете ли вы сказать, какой тип объекта создается?

Может помочь, если вы разместите предупреждение компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...