2013-02-11 50 views
0

我有一個給出路徑的字符串,另一個給它附加參數。當我把它們放入一個字符串並顯示時,我的格式正確。如果我嘗試將整個字符串放入NSURL中,它將顯示NULL。 獲取它的格式是什麼?來自字符串的URL給出null

NSString *booking=urlForBooking.bookHall; 
    NSLog(@" book %@",booking); // this prints --- http://10.2.0.76:8080/ConferenceHall/BookingHallServlet 

    NSString *bookingString=[booking stringByAppendingString:[NSString stringWithFormat:@"?  employeeId=%@&conferenceHallId=%@&bookingId=%d&purpouse=%@&fromDate=%@&toDate=%@&comments=%@&submit=1",empId,_hallId,_bookingId,_purpose,fromDateStr,toDateStr,_comments]]; 
    NSLog(@"book str %@",bookingString); //this prints --- ?employeeId=3306&conferenceHallId=112&bookingId=0&purpouse=S&fromDate=25/Feb/2013 13:29&toDate=25/Feb/2013 15:29&comments=C&submit=1 

    NSURL *bookingURL=[NSURL URLWithString:bookingString]; 
    NSLog(@"BOOK %@",bookingURL); //here I'm not getting the url(combined string), it gives null. 
+0

您的NSLog()輸出與代碼不一致。如果'bookingString'由'booking'通過*追加*來完成,那麼'bookingString'應該以'「http://10.2.0.76:....」開始。這是你的實際代碼嗎? – 2013-02-11 09:48:15

回答

3

這是因爲您正在構建的URL包含在URL中無效的章程,如空格和斜線。

你應該逃避這些字符:

NSString *bookingPath =[bookingString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL *bookingURL=[NSURL URLWithString:bookingPath]; 

您可能需要更換斜線的日期,因爲他們可能沒有被正確編碼。

NSString *bookingString=[NSString stringWithFormat:@"%@?employeeId=%@&conferenceHallId=%@&bookingId=%d&purpouse=%@&fromDate=%@&toDate=%@&comments=%@&submit=1", 
      booking, 
      empId, 
      _hallId, 
      _bookingId, 
      [_purpose stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], 
      [fromDateStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], 
      [toDateStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding], 
      [_comments stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

NSURL *bookingURL=[NSURL URLWithString:bookingString]; 
NSLog(@"BOOK %@",bookingURL); 
+0

當我嘗試在URL中顯示時,我仍然收到NULL。 – user1999892 2013-02-11 09:13:16

+0

由於您的網址仍包含非法字符,因此您應該自行轉義每個查詢參數。 – rckoenes 2013-02-11 09:17:32

+0

[EMPID stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding], [_hallId stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding], [_bookingId stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding],這裏EMPID,_hallId,_bookingID被NSNumbers .....我收到以下警告: 'NSNumber的' 可能不響應以stringByReplacing ....和錯誤爲:[_NSCFNumber stringByReplacingPercentEscapeUsingEncoding:]:無法識別的選擇器發送到實例。 – user1999892 2013-02-11 09:26:19

1

您的URL字符串在某些方面不正確,因此得到解析爲零。 NSURL的文檔告訴您這可能發生:

返回值用URLString初始化的NSURL對象。如果字符串 格式錯誤,則返回nil。

您不應該在URL的?部分之後擁有所有那些前導空格,並且整個事情在將其解析爲URL之前需要先轉義。

0

_ bookingString_(在employeeId和日期之前)中的空格會終止您的URL。