2010-12-29 3 views
10

У меня есть еще один вопрос с новичком.NSString cString устарела. Какая альтернатива?

Я написал фрагмент кода, который преобразует NSString в NSMutableData, чтобы имитировать результат webService.

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

NSString *testXMLDataString = 
@"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
    etc.... 
"</SOAP-ENV:Envelope>"; 

//Replace webData Received from the web service with the test Data 
NSMutableData *testXMLData = [NSMutableData dataWithBytes:[testXMLDataString cString] length:[testXMLDataString length]]; 
[webData setData:testXMLData]; 
+1

Следует также отметить, что, когда вы видите предупреждения устаревания, часто собираются документы для устаревшего метода покажет вам, какие альтернативы есть. Например, документы для cString рекомендуют использовать cStringUsingEncoding: или UTF8String. http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/DeprecationAppendix/AppendixADeprecatedAPI.html%23//apple_ref/doc/uid/20000154-cString –

ответ

13
  1. Получить исходные байты из строки.
  2. Получите длину этих байтов в кодировке UTF8.
  3. Создайте объект NSData с использованием метода +dataWithBytes:length:.

const char *rawBytes = [testXMLDataString UTF8String]; 
const NSUInteger length = [testXMLDataString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; 
NSAssert(length > 0, @"Couldn't convert to UTF-8"); 

NSMutableData *testXMLData = [NSMutableData dataWithBytes:rawBytes length:length]; 
[webData setData:testXMLData]; 
+0

Это сработало отлично. Все, что я сделал, это заменить cString на UTF8String. Спасибо! – manospro

+1

@manospro Обратите внимание, что '[длина строки]' не является длиной представления UTF-8. Он отлично работает, только когда 'string' является фактически ASCII. Вместо этого используйте '[string lengthOfBytesUsingEncoding: NSUTF8StringEncoding]' или '[[string dataUsingEncoding: NSUTF8StringEncoding] mutableCopy]'. – user3125367

Смежные вопросы