iOS开发:为什么我的NSURLConnection失败,只有部分用户出现“错误的URL”错误?

时间:2011-05-28 15:41:49

标签: iphone ios ipad nsurlconnection

我有一个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)

非常感谢你所有的智慧!

4 个答案:

答案 0 :(得分:30)

看起来您不是在编码用户名。用户名中是否有空格或其他特殊字符?请研究使用NSString方法stringByAddingPercentEscapesUsingEncoding:

答案 1 :(得分:8)

这可能取决于包含不允许用于网址的字符的特定网址。

您可以尝试转义网址:

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

答案 2 :(得分:1)

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

答案 3 :(得分:-1)

这种问题可能是由于具有特殊字符的论证数据(即Andy& Co)。 SOAP会自动拒绝此请求并返回错误的URL或错误的请求。因此,在发送数据之前,请确保数据具有特殊字符,例如&,<,> ... 如果你找到&在您的字符串数据中,替换为<&> amp;到该字符串(例如,安迪&&& amp; Co)。希望这些输入对您有所帮助。

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