2013-02-11 2 views
0

У меня есть строка, которая дает путь, а другая, которая добавляет к нему параметры. Когда я помещаю их в строку и дисплей, я получаю правильный формат. Если я попытаюсь поместить всю строку в NSURL, она отобразит NULL. Каков формат для его получения?URL from string дает 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: ...." '. Это ваш фактический код? –

ответ

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); 
+0

Я все еще получаю NULL, когда пытался показать URL. – user1999892

+0

Вы должны избегать каждого параметра запроса по своему усмотрению, поскольку ваш URL-адрес по-прежнему содержит недопустимые символы. – rckoenes

+0

[EmpId stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding], [_hallId stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding], [_bookingId stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding] Здесь EmpId, _hallId, _bookingID являются NSNumbers ..... Я получаю следующее предупреждение: 'NSNumber' не может ответить to stringByReplacing .... И ошибка как: [_NSCFNumber stringByReplacingPercentEscapeUsingEncoding:]: непризнанный селектор, отправленный в экземпляр. – user1999892

1

Ваша URL-строка некорректна и, как таковая, анализируется на нуль. Документация для NSURL сообщает, что это может произойти:

Возвращаемое значение Объект NSURL, инициализированный URLString. Если строка была искажена, возвращает nil.

Вы не должны иметь все эти начальные пробелы после ? части вашего URL, и все, что нужно экранировать до разбора его в URL.

0

Пробелы в _ bookingString_ (до employeeId и в дате) убивают ваш URL.