2012-01-25 10 views
0

こんにちは、私はJSONを介してサーバにデータを送信する必要があり、通常、私はそのようにそれを行うエスケープ:iphoneのURLの問題

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の長さのようなものが、私周りに検索し、それは私が私のために動作しません。このfonctionを発見した私は、URLのSIをエスケープしなければならないことを意味している:

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

、そこにプログラムがちょうど停止し、それがsignal EXC_BAD_ACCess言います。

私は実際にはCFStringRefに変更可能な文字列を変換する方法を知らないので、xcodeは私には訂正を提案しましたが、何が起こっているのかは分かりません。助けてください....私はドキュメントを読んだが、それはNSSMutableStringをCFStringRefにキャストする方法や、NSURLオブジェクトを直接作成する方法を説明していない。 Thks

答えて

1

なぜ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を使用していない場合は、物事を解放することを忘れないでください)

1

NSString *toll-free bridgingとして知られているメカニズムを介してもCFStringRefであるとNSMutableString *ですまた、継承を介してNSString *。だから、コードの2番目の行は次のようになります。「非所有参照してオブジェクトを返すの二次的利点を持っている

NSString *temp2 = 
      [temp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

を、あなたはドン:

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

ものの、実際にあなたが好むかもしれませんあなたがARCを使用していなくてもそれを解放することについて心配する必要はありません。