来自string的URL为null

时间:2013-02-11 08:15:04

标签: objective-c macos cocoa

我有一个提供路径的字符串,另一个将参数附加到它的字符串。当我把它们放在一个字符串和显示器中时,我的格式正确。如果我尝试将整个字符串放在NSURL中,它会显示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.

3 个答案:

答案 0 :(得分: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); 

答案 1 :(得分:1)

您的网址字符串在某种程度上是不正确的,因此会被解析为nil。 NSURL的文档告诉您可能会发生这种情况:

  

返回值使用URLString初始化的NSURL对象。如果是字符串   是畸形的,返回零。

您不应该在网址的?部分之后拥有所有这些前导空格,并且在将其解析为网址之前需要对所有内容进行转义。

答案 2 :(得分:0)

_ bookingString_中的空格(在employeeId之前和日期之前)会删除您的网址。