IOS Develoment: Почему мой NSURLConnection не работает с ошибкой "плохого URL" только для некоторых пользователей?

У меня есть приложение iOS, которое запрашивает данные JSON из моего приложения Rails 3, размещенного на Heroku, и отлично работает на моем устройстве и для многих других пользователей, кроме одного. У меня есть один пользователь, который сказал мне, что мое приложение не может получить данные JSON, поэтому я отправил мне некоторые данные журнала, и журнал показал, что метод делегата NSURLConnection didFailWithError вызывается, а описание ошибки читается "плохой URL" . Почему возникает эта ошибка и почему она ТОЛЬКО происходит только на некоторых устройствах, а не на всех устройствах?

Здесь мой код,

-(void)getTournamentInfoWithUsername:(NSString*)username
{
    NSString *urlString = [NSString stringWithFormat:@"http://myapp-tourney.heroku.com/tournaments/next.json?username=%@", username];
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
    [self setUrlConnection:[[NSURLConnection alloc] initWithRequest:request delegate:self]];
}

- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
    [MyLog logError:[NSString stringWithFormat:@"%@ - %@ - %@ - %@", [error localizedDescription], [error localizedFailureReason], [error localizedRecoveryOptions], [error localizedRecoverySuggestion]]];
}

и журнал показывает...

bad URL - (null) - (null) - (null)

Спасибо за вашу мудрость!

Ответ 1

Не похоже, что вы кодируете имя пользователя. Есть ли пробелы или другие специальные символы в имени пользователя? Изучите метод NSString stringByAddingPercentEscapesUsingEncoding:.

Ответ 2

Вероятно, это зависит от конкретного URL-адреса, содержащего символы, которые не разрешены для URL-адреса.

Вы можете попытаться избежать URL-адреса:

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding` 

Ответ 3

Я не уверен, как это вообще относится к вашей проблеме, но изменение области в приложении "Настройки" повлияло на способность моего приложения загружаться. Он выплевывал ту же ошибку Bad URL, если регион не был установлен в Соединенные Штаты. Это может объяснить, почему некоторые пользователи получают ошибки, а не другие.

Ответ 4

Такая проблема может возникнуть из-за данных аргумента, имеющих специальные символы (т.е. Andy and Co). SOAP автоматически отклонит этот запрос и возвращает неверный URL-адрес или неверный запрос. Поэтому перед отправкой данных убедитесь, что данные имеют специальные символы, такие как &, <, > ... Если вы нашли и в своих строковых данных, замените на < & > к этой строке (например, Andy & > Co). Надеюсь, этот вклад поможет вам.

Примечание. Перед использованием, пожалуйста, удалите start (< > ) и завершите тег этим символом.