在今天的大部分时间里,我一直在尝试使用Alamofire并使用它来收集一些基于API的数据来填充表格。我已成功设法将数据存入我的iOS应用程序(我可以打印看到它),但我不能在我的生活中找出使用我的数据填充正确数量的表行和设置的上下文标签。
我的网络数据是这样的;
{
"members": [
"Bob Dole",
"Bill Clinton",
"George Bush",
"Richard Nixon",
]
}
我的TableViewController有这样的代码;
...
var group: String?
var memberArr = [String]()
var member: [String] = []
...
override func viewDidLoad() {
super.viewDidLoad()
func getData(resultHandler: (data: AnyObject?) -> ()) -> () {
Alamofire.request(.GET, "http://testurl/api/", parameters: ["groupname": "\(group!)"])
.responseJSON { (_, _, JSON, _) in
let json = JSONValue(JSON!)
let data: AnyObject? = json
let memberArr:[JSONValue] = json["members"].array!
for obj in json["members"] {
let member = obj.string!
}
resultHandler(data: data)
}
}
...
...
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return memberArr.count
}
....
我的返回memberArr.count不起作用
然而,我无法弄清楚的是如何让我的"成员"变量可以在整个控制器中访问,因为我想用它来返回正确的行数或使用成员列表来动态设置每个单元格的标题。
我知道这是一个新手问题,但我已经通过StackOverflow进行了挖掘,并且所有问题似乎都不符合我的情况。
提前谢谢!
答案 0 :(得分:3)
发生的事情是getData有一个在后台运行的完成块,你需要在读完返回的数据后告诉swift更新表,但是你需要在主线程中发回这个更新:
func getData(resultHandler: (data: AnyObject?) -> ()) -> () {
Alamofire.request(.GET, "http://testurl/api/", parameters: ["groupname": "\(group!)"])
.responseJSON { (_, _, JSON, _) in
let json = JSONValue(JSON!)
let data: AnyObject? = json
let memberArr:[JSONValue] = json["members"].array!
for obj in json["members"] {
let member = obj.string!
}
resultHandler(data: data)
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
}
我希望能帮到你!