在我的 Swift iOS 项目中,我尝试使用通过 Alamofire 检索并使用 SwiftyJSON 解析的 JSON 数据填充自定义类对象数组。不过,我的问题是结合两个不同网络请求的结果,然后UITableView
用结果数组填充 a 。
我的自定义类已实现:
class teamItem: Printable {
var name: String?
var number: String?
init(sqljson: JSON, nallenjson: JSON, numinjson: Int) {
if let n = sqljson[numinjson, "team_num"].string! as String! {
self.number = n
}
if let name = nallenjson["result",0,"team_name"].string! as String! {
self.name = name
}
}
var description: String {
return "Number: \(number) Name: \(name)"
}
}
这是我的viewDidLoad()
:
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
refresh() {
() -> Void in
self.tableView(self.tableView, numberOfRowsInSection: self.teamsArr.count)
self.tableView.reloadData()
for item in self.teamsArr {
println(item)
}
return
}
self.tableView.reloadData()
}
这就是refresh()
方法:
func refresh(completionHandler: (() -> Void)) {
populateArray(completionHandler)
}
最后,populateArray()
:
func populateArray(completionHandler: (() -> Void)) {
SqlHelper.getData("http://cnidarian1.net16.net/select_team.php", params: ["team_num":"ALL"]) {
(result: NSData) in
let jsonObject : AnyObject! = NSJSONSerialization.JSONObjectWithData(result, options: NSJSONReadingOptions.MutableContainers, error: nil)
let json = JSON(jsonObject)
self.json1 = json
println(json.count)
for var i = 0; i < json.count; ++i {
var teamnum = json[i,"team_num"].string!
NSLog(teamnum)
Alamofire.request(.GET, "http://api.vex.us.nallen.me/get_teams", parameters: ["team": teamnum])
.responseJSON { (req, res, json, err) in
let json = JSON(json!)
self.json2 = json
self.teamsArr.append(teamItem(sqljson: self.json1, nallenjson: self.json2, numinjson: i))
}
}
completionHandler()
}
}
我遇到的第一个问题是,i
在 for 循环中达到 3 并在我认为它真的不应该时导致错误,因为 JSON 数组只包含 3 个条目。reloadData()
我的另一个主要问题是,在我使用 UI 中的重新加载按钮手动触发之前,表格视图将是空的,即使这样,表格中的数据也存在问题。
非常感谢任何帮助,因为我对 iOS 和 Swift 非常陌生,处理 Alamofire 的异步调用真的让我很困惑。我一直在编写的代码变得如此庞大并产生了如此多的小错误,我认为可能会有更好的方法来实现我的目标。抱歉这个冗长的问题,并提前感谢您的任何回复!