2010-12-29 5 views
10

Ich habe noch eine neue Frage.NSString cString ist veraltet. Was ist die Alternative?

Ich habe einen Code geschrieben, der einen NSString in NSMutableData konvertiert, um ein WebService-Ergebnis zu simulieren.

Es stellt sich jedoch heraus, dass cString veraltet ist. Kannst du mir helfen, es zu ersetzen? Hier ist mein Code.

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

Es sollte auch beachtet werden, dass, wenn Sie deprecation Warnungen sehen, die oft für die veraltete Methode, um die Dokumente gehen wird Ihnen sagen, welche Alternativen es gibt. Zum Beispiel empfehlen die Dokumente für cString die Verwendung von cStringUsingEncoding: oder UTF8String. http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/DeprecationAppendix/AppendixADepreatedAPI.html%23//apple_ref/doc/uid/20000154-cString –

Antwort

13
  1. das rohe Bytes aus dem String holen.
  2. Die Länge dieser Bytes in der UTF8-Codierung abrufen.
  3. Erstellen Sie das Objekt NSData mit der Methode +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

Das hat perfekt funktioniert. Ich habe nur cString mit UTF8String ersetzt. Danke! – manospro

+1

@manospro Bitte beachten Sie, dass '[string length]' nicht die Länge der UTF-8-Repräsentation ist. Es funktioniert nur dann einwandfrei, wenn 'string' tatsächlich ASCII ist. Verwenden Sie '[string lengthOfBytesUsingEncoding: NSUTF8StringEncoding]' oder '[[string dataUsingEncoding: NSUTF8StringEncoding] mutableCopy]' stattdessen. – user3125367