2010-12-29 29 views
10

Tengo otra pregunta para principiantes.NSString cString está obsoleto. ¿Cuál es la alternativa?

He escrito un fragmento de código que convierte un NSString en NSMutableData para simular un resultado de webService.

Sin embargo, cString está en desuso. ¿Puedes ayudarme a reemplazarlo? Aquí está mi código.

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

Cabe señalar también que cuando vea las advertencias de obsolescencia, a menudo ir a los documentos para el método desaprobado le dirá qué alternativas existen. Por ejemplo, los documentos para cString recomiendan usar cStringUsingEncoding: o UTF8String. http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/DeprecationAppendix/AppendixADeprecatedAPI.html%23//apple_ref/doc/uid/20000154-cString –

Respuesta

13
  1. Obtener los bytes sin formato de la cadena.
  2. Obtenga la longitud de esos bytes en la codificación UTF8.
  3. Crea el objeto NSData utilizando el método +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

Eso funcionó perfectamente. Todo lo que hice fue reemplazar cString con UTF8String. Gracias! – manospro

+1

@manospro Tenga en cuenta que '[string length]' no es la longitud de la representación UTF-8. Funciona perfectamente solo mientras 'string 'es realmente ASCII. Use '[string lengthOfBytesUsingEncoding: NSUTF8StringEncoding]' o '[[string dataUsingEncoding: NSUTF8StringEncoding] mutableCopy]' en su lugar. – user3125367

Cuestiones relacionadas