【问题标题】:Handling network exceptions IOS处理网络异常IOS
【发布时间】:2013-09-18 09:06:12
【问题描述】:

我是 Objective-c 的新手,我正在为 android 和 iPhone 做同样的应用程序。

在 Java 中,我使用 try-catch 块来捕获网络异常并进行处理。

在 Objective-C 中我正在使用:

[[NSXMLParser alloc] initWithContentsOfURL:url]

那么,在解析输入流时如何处理网络异常,以便如果网络出现故障或出现任何问题,我可以通知用户并保持我的应用正常运行?

【问题讨论】:

标签: ios objective-c exception-handling network-programming


【解决方案1】:

如果您使用的是 NSXMLParser,请使用它的 delgate 方法..

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
NSLog(@"Error = %@", parseError);
}

【讨论】:

  • 只有在数据下载完成后才会调用。问题是关于处理网络错误的。
  • 如果启动时出现网络故障,则应调用此方法
  • 不,只有当 XML 解析器无法解析数据时才会调用此方法。在initWithContentsOfURL fails 的情况下,NSXMLParser 实例为nil。这不足以知道发生了什么网络错误。
  • 这会向代理报告一个致命错误。如果发生网络故障或异常,解析器将停止解析。在投票之前请检查
  • @Kalpesh 请编辑您引用 Apple 文档的答案。你还能看到 HTTP 状态码吗?
【解决方案2】:

使用initWithContentsOfURL: 方法绝不是一个好主意。

您最好通过NSURLConnectionAFNetworking 之类的库来检索数据。这将允许您处理 HTTP 状态代码和网络错误。

例如NSURLConnectionDelegate 有一个回调方法– connection:didFailWithError: 将在发生错误时调用。 然后,您可以检查错误对象以查看问题所在。

【讨论】:

  • 似乎是一个好方法,但我不需要知道html错误代码,只要解析成功与否。
  • 我已经接受了 Kalpesh 的回答,以便更快地实施,更好地满足我的需要,无论如何我认为你的回答是处理套接字错误的更好方法。
【解决方案3】:

在调用 URL 之前您可以检查互联网连接。

我建议你看看下面的链接 How to check for an active Internet connection on iOS or OSX?

我建议使用 raptureXML 解析 XML 文件,这非常简单。 https://github.com/ZaBlanc/RaptureXML

【讨论】:

  • 我当然会在此之前检查互联网连接,但无论如何下载时网络可能会失败。
  • 使用 NSURLConnection 委托方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2019-01-15
  • 1970-01-01
相关资源
最近更新 更多