【问题标题】:iOS Develoment: Why is my NSURLConnection failing with a "bad URL" error for only some users?iOS 开发:为什么我的 NSURLConnection 仅对某些用户出现“错误 URL”错误?
【发布时间】:2013-09-02 20:25:17
【问题描述】:

我有一个 iOS 应用程序从我的 Rails 3 应用程序请求 JSON 数据,托管在 Heroku 上,它在我的设备和许多其他用户上运行良好,除了一个。我有一个用户告诉我,我的应用程序无法检索 JSON 数据,所以我让她给我发送了一些日志数据,日志显示 NSURLConnection 委托方法 didFailWithError 正在被调用,错误描述为 “错误网址”。为什么会出现这个错误?为什么它只出现在某些设备上而不是所有设备上?

这是我的代码,

-(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)

非常感谢您的智慧!

【问题讨论】:

标签: iphone ios ipad nsurlconnection


【解决方案1】:

您似乎没有对用户名进行编码。用户名中是否有空格或其他特殊字符?研究使用NSString 方法stringByAddingPercentEscapesUsingEncoding:

【讨论】:

  • 是的,这也是我所怀疑的。
  • 是的,她的用户名中有空格,谢谢!请问我应该使用哪种编码? 'NSUTF8StringEncoding' 会起作用吗?我怎么知道该选择哪个?再次感谢!
  • 是的,使用 UTF-8,因为这是 RFC 3986 所要求的。
  • 我的天,Apple 有一些糟糕的方法名称。
【解决方案2】:

这可能取决于特定的 URL,其中包含 URL 不允许的字符。

您可以尝试转义 URL:

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

【讨论】:

    【解决方案3】:

    我不确定它是否与您的问题有关,但更改设置应用程序中的区域会影响我的应用程序的下载能力。如果区域未设置为美国,它会吐出相同的错误 URL 错误。这或许可以解释为什么有些用户会出错,而其他用户却不会。

    【讨论】:

      【解决方案4】:

      这种问题可能是由于参数数据具有特殊字符(即 Andy & Co)。 SOAP 会自动拒绝此请求并返回 Bad URL 或 Bad Request。因此,在发送数据之前,请确保数据具有特殊字符,如 &,... 如果您在字符串数据中找到 & ,请替换为 amp;到那个字符串(例如,Andy amp; Co)。希望这些意见对您有所帮助。

      注意:在使用之前,请去掉带有该符号的开始()和结束标记。

      【讨论】:

      • 实际上吉姆已经给出了相同的答案,我认为您没有提供任何新信息。
      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      相关资源
      最近更新 更多