2012-01-25 133 views
0

您好我必須通過JSON將數據發送到服務器,通常我這樣做是:iphone網址逃避問題

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的長度,但我有大約搜查,這意味着我必須逃離我的網址SI我發現這個fonction不爲我工作:

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 *也是CFStringRef通過被稱爲toll-free bridging的機制和NSMutableString *是通過繼承也是NSString *。所以,你的代碼的第二行應該是:

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

儘管在實踐中,你可能會喜歡:

NSString *temp2 = 
      [temp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

已與非擁有參考返回一個對象的第二個優點,所以你不」即使你不使用ARC,也不必擔心它會被釋放。