iOS开发:为什么我的NSURLConnection因某些用户的"错误URL"错误而失败?

Bea*_*red 10 iphone nsurlconnection ipad ios

我有一个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]]];
}
Run Code Online (Sandbox Code Playgroud)

并且日志显示......

bad URL - (null) - (null) - (null)
Run Code Online (Sandbox Code Playgroud)

非常感谢您的所有智慧!

Jim*_*Jim 30

它看起来不像您正在编码用户名.用户名中是否有空格或其他特殊字符?考虑使用该NSString方法stringByAddingPercentEscapesUsingEncoding:.

  • 我的上帝Apple有一些可怕的方法名称. (3认同)

ser*_*gio 8

这可能取决于包含不允许用于URL的字符的特定URL.

您可以尝试转义URL:

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding` 
Run Code Online (Sandbox Code Playgroud)