2010-12-29 15 views
10

Mam kolejne pytanie dla początkujących.NSString cString jest przestarzałe. Jaka jest alternatywa?

Napisałem fragment kodu, który konwertuje NSString na NSMutableData w celu symulacji wyniku WebService.

Okazuje się jednak, że cString jest przestarzałe. Czy możesz mi pomóc go wymienić? Oto mój kod.

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

Należy zauważyć również, że gdy widzisz ostrzeżenia amortyzację, często dzieje się do dokumentów dotyczących nieaktualnych metody powie, co alternatywy istnieją. Na przykład dokumenty dla cString zalecają używanie cStringUsingEncoding: lub UTF8String. http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/DeprecationAppendix/AppendixADeprecatedAPI.html%23//apple_ref/doc/uid/20000154-cString –

Odpowiedz

13
  1. Get surowych bajtów z łańcucha.
  2. Uzyskaj długość tych bajtów w kodowaniu UTF8.
  3. Utwórz obiekt NSData za pomocą metody +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

To działało idealnie. Wszystko, co zrobiłem, to zastąpienie cStringa UTF8String. Dzięki! – manospro

+1

@manospro Zwróć uwagę, że '[długość łańcucha]' nie jest długością reprezentacji UTF-8. Działa idealnie tylko wtedy, gdy 'string' jest w rzeczywistości ASCII. Użyj '[string lengthOfBytesUsingEncoding: NSUTF8StringEncoding]' lub '[[string dataUsingEncoding: NSUTF8StringEncoding] mutableCopy]' zamiast. – user3125367

Powiązane problemy