我有一个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)
非常感谢你所有的智慧!
答案 0 :(得分:30)
看起来您不是在编码用户名。用户名中是否有空格或其他特殊字符?请研究使用NSString
方法stringByAddingPercentEscapesUsingEncoding:
。
答案 1 :(得分:8)
这可能取决于包含不允许用于网址的字符的特定网址。
您可以尝试转义网址:
- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding`
答案 2 :(得分:1)
我不确定如果它与您的问题有关,但更改设置应用中的区域会影响我的应用程序的下载能力。如果该区域未设置为美国,它会吐出相同的错误URL错误。这可能解释了为什么有些用户会收到错误而不是其他用户。
答案 3 :(得分:-1)
这种问题可能是由于具有特殊字符的论证数据(即Andy& Co)。 SOAP会自动拒绝此请求并返回错误的URL或错误的请求。因此,在发送数据之前,请确保数据具有特殊字符,例如&,<,> ... 如果你找到&在您的字符串数据中,替换为<&> amp;到该字符串(例如,安迪&&& amp; Co)。希望这些输入对您有所帮助。
注意:在使用之前,请删除带有该符号的开始(<>)和结束标记。