繁体   English   中英

iphone 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 *也是通过称为免费桥接的机制的CFStringRefNSMutableString *也是通过继承的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM