2010-12-29 29 views
10

Tôi có một câu hỏi mới khác.NSString cString không được chấp nhận. Phương án thay thế là gì?

Tôi đã viết một đoạn mã chuyển đổi một NSString thành NSMutableData để mô phỏng kết quả webService.

Tuy nhiên, hóa ra là cString không được dùng nữa. Bạn có thể giúp tôi thay thế nó không? Đây là mã của tôi.

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

Cần lưu ý cũng là khi bạn nhìn thấy cảnh báo không dùng nữa, thường đi đến các tài liệu cho các phương pháp phản đối sẽ cho bạn biết lựa chọn thay thế có. Ví dụ: tài liệu cho cString khuyên bạn nên sử dụng cStringUsingEncoding: hoặc UTF8String. http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/DeprecationAppendix/AppendixADeprecatedAPI.html%23//apple_ref/doc/uid/20000154-cString –

Trả lời

13
  1. Lấy byte thô từ chuỗi.
  2. Lấy độ dài của các byte đó trong mã hóa UTF8.
  3. Tạo đối tượng NSData bằng phương pháp +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

Điều đó hoạt động hoàn hảo. Tất cả những gì tôi làm là thay thế cString bằng UTF8String. Cảm ơn! – manospro

+1

@manospro Xin lưu ý rằng '[string length]' không phải là độ dài của đại diện UTF-8. Nó hoạt động hoàn hảo chỉ trong khi 'chuỗi' thực sự là ASCII. Sử dụng '[string lengthOfBytesUsingEncoding: NSUTF8StringEncoding]' hoặc '[[string dataUsingEncoding: NSUTF8StringEncoding] mutableCopy]' thay thế. – user3125367

Các vấn đề liên quan