来自字符串的URL给出null

问题描述:

我有一个给出路径的字符串,另一个给它附加参数。当我把它们放入一个字符串并显示时,我的格式正确。如果我尝试将整个字符串放入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

这是因为您正在构建的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

您的URL字符串在某些方面不正确,因此得到解析为零。 NSURL的文档告诉您这可能发生:

返回值用URLString初始化的NSURL对象。如果字符串 格式错误,则返回nil。

您不应该在URL的?部分之后拥有所有那些前导空格,并且整个事情在将其解析为URL之前需要先转义。

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