嗨,我必须通过JSON将数据发送到服务器,通常我会这样做:
NSMutableString * temp=[[NSMutableString alloc] initWithString:service_registra_inc];
//here I add more staff to temp
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:temp]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
但我收到了一些错误消息,说url是错误的:类似url长度的东西,但我四处搜索了一下,这意味着我必须逃离我的url,因为我发现了这个对我不起作用的功能:
NSString *temp2=(__bridge_transfer NSString*)CFURLCreateStringByAddingPercentEscapes(NULL,((CFStringRef)temp.UTF8String),NULL,NULL,kCFStringEncodingUTF8);
然后程序就停止了,它说CCD_ 1。
好吧,我真的不知道如何将可变字符串转换为CFStringRef,所以xcode只是为我建议了更正,但我并不真正理解发生了什么。请帮忙。。。。我已经阅读了文档,但它没有说明如何将NSSMutableString强制转换为CFStringRef并返回,也没有说明如何使用整个过程直接创建NSURL对象。Thks
为什么要使用CFURL&CFStringRef函数在这里?
您可以通过NSString的stringByAddingPercentEscapesUsingEncoding:
方法来执行您想要执行的操作。我已经为你链接了文档。
类似于:
NSMutableString * temp=[[NSMutableString alloc] initWithString:service_registra_inc];
// append your staff... errr, stuff here.
NSString * temp2 = [temp stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:temp2]];
[NSURLConnection alloc] initWithRequest:request delegate:self];
(如果不使用ARC,请不要忘记发布内容)
NSString *
通过称为免费桥接的机制也是CFStringRef
,NSMutableString *
通过继承也是NSString *
。所以你的第二行代码应该是:
NSString *temp2 = (__bridge_transfer NSString *)
CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)temp,
NULL,
NULL,
kCFStringEncodingUTF8);
尽管在实践中你可能更喜欢:
NSString *temp2 =
[temp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
它的第二个优点是返回一个具有非拥有引用的对象,因此即使不使用ARC.