如何设置下载数据的时间限制(来自json数据库)Swift 2
Posted
技术标签:
【中文标题】如何设置下载数据的时间限制(来自json数据库)Swift 2【英文标题】:How to set a time limit downloading data (From json Database) Swift 2 【发布时间】:2016-08-27 17:59:33 【问题描述】:我创建了一个按钮,当它被点击时,我的应用程序开始下载一个存储在数组中的 json 数据库。
当我开始下载数据库时,有时互联网很慢,设备无法下载内容,即使用户没有获得所需的数据,仍然可以使用该应用程序。
我想要的是一个计时器或一个计数器,它会在请求时间超过 1 分钟时提醒用户,并显示一条消息“没有互联网连接”或“下载数据库太慢”。
我希望你至少给我一个想法,因为我什至不知道要搜索什么:(
谢谢!
更新:这是我目前得到的代码。
覆盖 func viewDidLoad() super.viewDidLoad()
let url = NSURL(string: "http://146.83.128.64/tongoy/g.php?&sala=-1&curso=-1&profesor=-1&semestre=-1&semestrec=-1&carrera=-1&area=-1")!
let task = NSURLSession.sharedSession().dataTaskWithURL(url) (data, response, error) -> Void in
if let urlContent = data
do
let jsonResult = try NSJSONSerialization.JSONObjectWithData(urlContent, options: NSJSONReadingOptions.MutableContainers)
for json in jsonResult as! Array<AnyObject>
if let area = json["area"] as? String
self.arregloArea.append(area)
if let id = json["id"] as? Int
self.arregloID.append(id)
if let curso = json["curso"] as? String
self.arregloCursos.append(curso)
if let carreras = json["carreras"] as? Array<AnyObject>
for item in carreras
if let id = item["id"] as? Int
print(id)
if let nombre = item["nombre"] as? String
print(nombre)
if let semestre = item["semestre"] as? Int
print(semestre)
if let curso = item["curso"] as? Int
print(curso)
catch
print("JSON serialization failed")
dump(arregloCursos)
dump(arregloArea)
dump(arregloID)
task.resume()
【问题讨论】:
你是如何下载数据的?您可能可以使用一个超时属性。NSURLSession
可广泛定制。
显示您的代码。你是如何下载数据的?您应该使用 URLSession。您还可以使用 Reachability 确保设备已连接到 wifi 网络
你可以使用 NSURLSession 的timeOut
属性。检查这个问题。 ***.com/questions/23428793/…
我还没有真正的代码,我使用我的数据库链接下载NSJSONSerialization
的数据库
【参考方案1】:
let request = NSMutableURLRequest(URL: url!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)
这将获取您的 JSON 数据库的 URL,设置为变量 url
,然后以 5.0 秒的超时间隔请求它,您可以根据需要进行调整!祝你好运
更新:
let url = NSURL(string: "http://146.83.128.64/tongoy/g.php?&sala=-1&curso=-1&profesor=-1&semestre=-1&semestrec=-1&carrera=-1&area=-1")!
let request = NSMutableURLRequest(URL: url)
let taskConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
taskConfiguration.timeoutIntervalForRequest = 10
taskConfiguration.timeoutIntervalForResource = 10
self.session = NSURLSession(configuration: taskConfiguration, delegate: self.delegates, delegateQueue: nil)
let task = session.dataTaskWithRequest(request, completionHandler: data, response, error -> Void in
let json:JSON = JSON(data: data!)
onCompletion(json, error)
)
注意:
现在你有一个超时,如果你没有收到数据回来/超时,你将不得不处理。因此,请检查您的数据是否 == nil,或者您的偏好是什么,并采取措施避免崩溃。
总结:
本质上,您是在创建自己的 NSURLSessionConfiguration,然后根据您应用的配置启动会话。
【讨论】:
嗯,我刚刚用我现在得到的代码更新了我的问题,你会在我的代码中哪里写?感谢您的反馈:) 我为你更新了我的答案,这应该可以满足你的需要!以上是关于如何设置下载数据的时间限制(来自json数据库)Swift 2的主要内容,如果未能解决你的问题,请参考以下文章
如何使用来自 Alamofire 的 JSON 数据填充 tableview?