问题:
我的应用有时需要对我的服务器运行API调用。但是,如果用户没有互联网连接,则应用程序崩溃,因为没有返回任何内容。我已经构建了一个名为 connection 的函数,如果用户有互联网连接,则返回true。
那么我如何使用它,当我运行 runAPI 方法时,首先检查连接,如果没有任何停止所有线程并显示“无Internet连接”的视图所以用户知道他必须修复他/她的连接。
请记住,其他类在此类中调用 runAPI 方法。所以说类XYZ调用位于类API中的 runAPI 方法。因此,如果没有连接,我想放弃正在发生的一切,只是简单地呈现“无互联网连接”视图。
func runAPI(request: String) -> NSDictionary {
return parseJSON(getJSON(request))
}
func runAPIArray(request: String) -> NSArray {
return parseJSONArray(getJSON(request))
}
func getJSON(urlToRequest: String) -> NSData{
return NSData(contentsOfURL: NSURL(string: urlToRequest))
}
func parseJSON(inputData: NSData) -> NSDictionary{
var error: NSError?
var boardsDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
return boardsDictionary
}
func parseJSONArray(inputData: NSData) -> NSArray{
var error: NSError?
var boardsArray: NSArray = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSArray
return boardsArray
}
func connection() -> Bool {
var reach = Reachability.reachabilityForInternetConnection()
var networkStatus = reach.currentReachabilityStatus()
return networkStatus != NetworkStatus.NotReachable
}
答案 0 :(得分:3)
但是,如果用户没有互联网连接,则应用程序崩溃,因为没有返回任何内容。
然后你有一个bug。仅仅因为你有一个连接并不意味着你会得到回报。仅仅因为你得到回报并不意味着它将是完整的或合法的。 (您可能很容易在请求中间丢失连接。)没有任何类型的网络响应会让您崩溃。您的代码必须具有弹性。
如果网络响应失败(由于多种原因),那么您应该处理该失败。当网络可访问性指示您没有连接时,您应显示“无连接”UI。这些是完全不同的问题。
请注意,网络可达性非常有限。它基本上表示如果您要求,系统将尝试连接到服务器。它绝不承诺连接会成功。路上可能有防火墙。服务器可能已关闭。该服务可能无法响应。只有发出请求才能告诉您请求是否会成功。
答案 1 :(得分:0)
为什么不将整件事包装在if / else中? 伪代码,但是:
if (connection() == YES)
{
hit API;
do whatever;
}
else
{
UIAlertView = "app requires internet conn";
}
这样你就不会冒险崩溃