0

パスを提供する文字列と、それにパラメーターを追加する別の文字列があります。それらを文字列に入れて表示すると、正しい形式になります。文字列全体を 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.
4

3 に答える 3

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); 
于 2013-02-11T08:20:27.093 に答える
1

URL 文字列が何らかの形で正しくないため、解析されて nil になります。NSURLのドキュメントには、これが発生する可能性があることが示されています。

戻り値 URLString で初期化された NSURL オブジェクト。文字列の形式が正しくない場合は、nil を返します。

URLの一部の後にすべての先行スペースを含めるべきではなく?、URL に解析する前に全体をエスケープする必要があります。

于 2013-02-11T08:21:19.577 に答える
0

_bookingString_ 内 (employeeId の前と日付内) のスペースは、URL を無効にします。

于 2013-02-11T08:26:42.810 に答える