【发布时间】:2016-01-06 16:31:40
【问题描述】:
我正在开发一个基于从指定 URL 请求的 JSON 对象的应用程序,但有时(不是每次)我没有得到任何结果
将显示一些代码 sn-ps 可以帮助确定这个简单的 (?) 问题
我的 class MyTestClass 中有一个名为“Data”(var Data:[String] = []) 的数组和以下函数:
func loadData(onComplete: ([String]) -> ()) {
// Declaring a local array
var Local:[String] = []
// Preparing JSON request
let address = "<URL goes here>"
let url = NSURL(string: address)
let request = NSURLRequest(URL: url!)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) { (data, response, error) in
if (data?.length > 0 && error == nil) {
let responseData = data as NSData!
if responseData == nil {
// Presenting some alert
} else {
let jsonObject: AnyObject? = try? NSJSONSerialization.JSONObjectWithData(responseData!, options: NSJSONReadingOptions.MutableContainers)
if jsonObject == nil {
// Presenting some alert
} else {
let json: NSArray = jsonObject as! NSArray
for (var i = 0; i < json.count; i++) {
if let obj = json[i] as? NSDictionary {
if let m = obj["m"] as? String {
if m != "Unknown" {
Local.append(m)
}
}
}
}
onComplete(Local)
}
}
} else if error != nil {
NSLog("Error: %@", error!)
}
}
// Starting task
task.resume()
}
在 viewDidLoad() 中我正在执行以下操作:
// Loading data
loadData { (d) in
for dat in d {
self.Data.append(dat)
}
}
我在每个 ViewController 中都使用这个解决方案(功能 100% 相同 [CTRL+C / CTRL+V]),我的层次结构如下: 表1->表2->表3
Table1 可以正常工作,没有问题,每次都可以正常显示结果,Table2 大部分时间都可以正常工作(有时很少不显示结果),但 Table3 大约 80% 的时间会发疯。
因为这件事发生在我身上,我很生气,在 iOS 9 之前,我使用同步调用并且没有任何问题,因为它是一个小应用程序,但现在我什至不知道如何使它与这个 @987654325 一起工作@东西。
【问题讨论】:
-
顺便说一句,我建议遵循 Cocoa 命名约定并以小写字母开头所有变量。 “数据”也具有误导性,因为按照惯例,这种名称往往与
NSData对象一起使用。我可能会建议strings(或者,更好的是,建议这些字符串是什么类型的字符串)而不是Data。 -
我只是用这个名字作为我的问题的一个例子,在我的实际应用中它是不同的,但感谢你的建议。
标签: ios swift ios9 nsurlsession