我已成功设置会话以从网站提取json数据 - 它可以正常工作。但是,当我开始使用数据填充数组时,数组不会填充信息。请帮忙。 这是我的Person类:
class Person {
var name1 = "name"
var info1 = "info"
init(name1: String, info1: String) {
self.name1 = name1
self.info1 = info1
}
}
这是我的setUpPerson函数:
func setUpPerson() {
let url = NSURL(string: "http://www.my-sites-jsondata")
if url != nil {
let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
let urlError = false
if error == nil {
var urlContent = NSString(data: data!, encoding: NSUTF8StringEncoding) as NSString!
var data: NSData = urlContent.dataUsingEncoding(NSUTF8StringEncoding)!
do {
let jsonObject = try (NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers) as? NSArray)!
var index1 = 0
while index1 < jsonObject.count {
var maindata = (jsonObject[index1] as! NSDictionary)
var nameA = maindata["Name"] as! String
var infoA = maindata["Info"] as! String
var data1 = Person(name1: nameA, info1: infoA)
self.arrayOfPersons.append(data1)
index1++
}
} catch {
print(urlError)
}
}
})
task.resume()
}
}
答案 0 :(得分:0)
您的代码看起来对我很好。
对我而言,您的self.arrayOfPersons
也正在设置中(我刚刚使用我的测试应用进行了测试)。
您可能尝试在异步dataTaskWithURL
块中设置之前将其打印出来。
异步块在后台执行,因此在块在主线程上执行后立即写入的代码,异步块中的代码将不会完成。
对我来说,代码肯定已经执行了。但是因为异步代码还没有完成执行,你没有看到它设置。
您必须等到异步代码执行完毕后再检查新值。
您可以尝试这样:
dispatch_async(dispatch_get_main_queue(), ^{
// Set your data on property here
});
答案 1 :(得分:0)
我能够成功完成这个项目。答案有两个......
dispatch_async(dispatch_get_main_queue()
reloadData()