iphone url избегая проблем - PullRequest
       0

iphone url избегая проблем

0 голосов
/ 25 января 2012

Привет, я должен отправить данные на сервер через 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);

и там программа просто останавливается и выдает signal EXC_BAD_ACCess.

Ну, я действительно не знаю, как преобразовать изменяемые строки в CFStringRef, поэтому xcode просто предложил поправки для меня, но я не совсем понимаю, что происходит. Пожалуйста, помогите .... Я прочитал документ, но он не говорит, как привести NSSMutableString к CFStringRef и обратно или как использовать все это для непосредственного создания объекта NSURL. Thks

Ответы [ 2 ]

1 голос
/ 25 января 2012

NSString * также является CFStringRef через механизм, известный как бесплатное мостовое соединение , а NSMutableString * также является NSString * посредством наследования.Таким образом, ваша вторая строка кода должна быть:

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

Хотя на практике вы можете предпочесть:

NSString *temp2 = 
          [temp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

, который имеет вторичное преимущество, заключающееся в возврате объекта с не принадлежащей ссылкой,поэтому вам не нужно беспокоиться о его выпуске, даже если вы не используете ARC.

1 голос
/ 25 января 2012

Почему вы используете здесь функции 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)

...