![](/img/trans.png)
[英]Using iphone UIWebKit to create a web browser, problems with getting url
[英]iphone url escaping problems
嗨,我必须通过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];
但我收到一些错误信息,网址是错误的:类似网址的长度,但我已经搜索过,这意味着我必须逃避我的网址,我发现这个功能对我不起作用:
NSString *temp2=(__bridge_transfer NSString*)CFURLCreateStringByAddingPercentEscapes(NULL,((CFStringRef)temp.UTF8String),NULL,NULL,kCFStringEncodingUTF8);
程序停止,它说signal EXC_BAD_ACCess
。
好吧,我真的不知道如何将可变字符串转换为CFStringRef,所以xcode只是为我提出了更正,但我真的不明白发生了什么。 请帮助....我已经阅读了文档,但它没有说明如何将NSSMutableString转换为CFStringRef并返回或如何使用整个东西直接创建NSURL对象。 THKS
为什么在这里使用CFURL和CFStringRef函数?
您可以通过NSString的stringByAddingPercentEscapesUsingEncoding:
方法执行您要执行的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,也无需担心释放它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.