iphone url转义问题



嗨,我必须通过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 *通过称为免费桥接的机制也是CFStringRefNSMutableString *通过继承也是NSString *。所以你的第二行代码应该是:

NSString *temp2 = (__bridge_transfer NSString *)
      CFURLCreateStringByAddingPercentEscapes(
         NULL,
         (CFStringRef)temp,
         NULL,
         NULL,
         kCFStringEncodingUTF8);

尽管在实践中你可能更喜欢:

NSString *temp2 = 
          [temp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

它的第二个优点是返回一个具有非拥有引用的对象,因此即使不使用ARC.

,也不需要担心释放它

最新更新