来自字符串的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.
这是因为您正在构建的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);
当我尝试在URL中显示时,我仍然收到NULL。 – user1999892 2013-02-11 09:13:16
由于您的网址仍包含非法字符,因此您应该自行转义每个查询参数。 – rckoenes 2013-02-11 09:17:32
[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。
您的NSLog()输出与代码不一致。如果'bookingString'由'booking'通过*追加*来完成,那么'bookingString'应该以'“http://10.2.0.76:....”开始。这是你的实际代码吗? – 2013-02-11 09:48:15