NSString的cString方法已经过时,有什么替代方法?

10

我有一个新手问题。

我编写了一段代码,将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 - Jason Coco
1个回答

13
  1. 从字符串中获取原始字节。
  2. 获取以UTF8编码的这些字节的长度。
  3. 使用+dataWithBytes:length:方法创建NSData对象。
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];

那很完美地解决了。我所做的只是用UTF8String替换了cString。谢谢! - manospro
2
请注意,[string length] 不是 UTF-8 表示的长度。只有在 string 实际上是 ASCII 时才能完美工作。请改用 [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding][[string dataUsingEncoding:NSUTF8StringEncoding] mutableCopy] - user3125367

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接