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