【问题标题】:NSURL has stopped working in appNSURL 已停止在应用程序中工作
【发布时间】:2013-07-09 13:48:02
【问题描述】:

我编写了一个应用程序,它下载然后从 html 文件中抓取数据。该应用程序几个月来一直运行良好,但最近几天就停止了。

这里是代码...

NSString* urlString = [@"http://easytide.ukho.gov.uk/EASYTIDE/EasyTide/ShowPrediction.aspx?PortID=" stringByAppendingString:portCode];
urlString = [urlString stringByAppendingString:@"&PredictionLength=7"];
NSURL* easyTidesUrl = [NSURL URLWithString:urlString];
NSData* easyTidesHtmlData = [NSData dataWithContentsOfURL:easyTidesUrl];

当我检查 NSURL 对象时,url 没有正确设置(字符串有错误)并且 NSURL 对象显示为 .我知道过去曾有人问过类似的问题(我已经尝试过解决方案,但在这种情况下它们不起作用),但奇怪的是,该应用程序运行良好,但现在没有做任何事情就被破坏了!


这里还有一些代码...基本上停止工作的部分是函数的第一部分...

+(void)getTides:(NSMutableArray *)tidalDateArray withPortCode:(NSString*)portCode
{
    NSString *parameter = [portCode stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *urlString = [NSString stringWithFormat:@"http://easytide.ukho.gov.uk/EASYTIDE/EasyTide/ShowPrediction.aspx?PortID=%@&PredictionLength=7", parameter];
    NSURL *easyTidesUrl = [NSURL URLWithString:urlString];
    NSData *easyTidesHtmlData = [NSData dataWithContentsOfURL:easyTidesUrl];

    TFHpple* tidesParser = [TFHpple hppleWithHTMLData:easyTidesHtmlData];

    NSString* easyTidesXPathQueryString = @"//div[@class='HWLWPanel']/table/tr/th[@class='HWLWTableHeaderCell']";
    NSArray* tideDateNodes = [tidesParser searchWithXPathQuery:easyTidesXPathQueryString];

    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];

    NSCalendar *gregorian = [[NSCalendar alloc]
                          initWithCalendarIdentifier:NSGregorianCalendar];

【问题讨论】:

  • 你得到 NSURL *easyTidesUrl nil 吗?
  • 不,NSURL 对象有一个内存地址等,所以我假设它已初始化......问题似乎出在 nsurl.urlString
  • 我尝试了上面的地址并被重定向到一个错误页面...如果您没有修改应用程序并且它无缘无故地中断,那么问题可能出在其他地方。我怀疑网站或主机服务器可能会发生变化。

标签: ios ios6.1


【解决方案1】:

Easytide 似乎已关闭,因此可能不是 API 问题!

【讨论】:

    【解决方案2】:

    portCode 变量中可能有一些非法包,比如空格:

    NSString *parameter = [portCode stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *urlString = [NSString stringWithFormat:@"http://easytide.ukho.gov.uk/EASYTIDE/EasyTide/ShowPrediction.aspx?PortID=%@&PredictionLength=7", parameter];
    NSURL *easyTidesUrl = [NSURL URLWithString:urlString];
    NSData *easyTidesHtmlData = [NSData dataWithContentsOfURL:easyTidesUrl];
    

    【讨论】:

    • url 没有空格,但 urlString 对象中的实际字符串显示为未知类... url 是:ukho.gov.uk/easytide/EasyTide/…
    • 你试过我的代码了吗,它应该会过滤掉你startViewController变量中一些不受支持的章程。
    • 我确实尝试过......不幸的是,从 portCode 创建更安全的参数变量没有任何区别......
    • 你能举一个portCode变量的例子吗,也可以用po打印出easyTidesUrl
    • portCode 的打印描述:0131 easyTidesUrl 的打印描述:easytide.ukho.gov.uk/EASYTIDE/EasyTide/… 出于某种原因,此 url 中有一个额外的 EasyTide...它不在 xcode 中...
    【解决方案3】:

    问题看起来毕竟是一个非常简单的问题......网址本身是错误的 - 无论是他们改变了它还是它是否在我不知道的代码中被改变了......谢谢你的所有帮助虽然和代码改进......

    【讨论】:

      猜你喜欢
      • 2014-12-08
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      相关资源
      最近更新 更多