【发布时间】:2015-12-04 02:44:31
【问题描述】:
我正在开发一个从 JSON 中提取问题的测验应用程序。我已经多次为 TableView 使用 reloadData 并按预期工作。但现在我正在使用 Alamofire 获取问题并将其保存在数组中并从数组中获取问题。
但它返回 Array is Out of Index.
如何在第一个单元格中显示数组的第一项?
风险投资
class ExamController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var Exam: UITableView!
var CourseID : String!
var EID : String!
var EName : String!
var ET : String!
var QArray : [String] = []
var progress = GradientCircularProgress()
override func viewDidLoad() {
super.viewDidLoad()
progress.show(style:MyStyle())
// JUST TRIED
dispatch_async(dispatch_get_main_queue(), {
self.getQuestions()
// DO SOMETHING ON THE MAINTHREAD
self.Exam.reloadData()
})
self.Exam.tableFooterView = UIView(frame: CGRectZero)
self.Exam.tableFooterView?.hidden = true
}
func getQuestions(){
if ET == "CHAPTER" {
Alamofire.request(.GET, "http://www.wis.com/index.php/capp/chapter_questions_details/\(CourseID)/\(EID)/10")
.responseJSON { (_, _, data, _) in
println(data)
let json = JSON(data!)
let catCount = json.count
for index in 0...catCount-1 {
let q = json[index]["QUESTION"].string
self.QArray.append(q!)
println(self.QArray)
}
}
self.progress.dismiss()
self.Exam.reloadData()
} else if ET == "FA" {
Alamofire.request(.GET, "http://www.wis.com/index.php/capp/fa_questions_by_course_id/\(CourseID)/\(EID)")
.responseJSON { (_, _, data, _) in
println(data)
let json = JSON(data!)
let catCount = json.count
for index in 0...catCount-1 {
let q = json[index]["QUESTION"].string
self.QArray.append(q!)
println(self.QArray)
}
}
self.progress.dismiss()
self.Exam.reloadData()
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row == 0{
let cell = self.Exam.dequeueReusableCellWithIdentifier("Question") as! QuestionCell
cell.Questionlabel?.text = QArray[0]
return cell
}
else
{
let cell = self.Exam.dequeueReusableCellWithIdentifier("Option") as! OptionCell
cell.Optionlabel?.text = "Option"
return cell
}
}
【问题讨论】:
-
numberOfRowsInSection必须动态返回数据源中的项目数,而不是静态值 -
在你调用
reloadData的地方写上println声明。我猜在您的数据返回之前会调用重新加载。日志应该会显示调用顺序。 -
@vadian 我的数组有 100 多个问题。但我的 TableView 中只需要 5 行
-
@PhillipMills 在我的 Alamofire 请求完成之前,表格视图首先加载:(
-
对于功能,请使用
Code convention并用小写字符命名你的变量。像aVariable,而不是Variable。如果是exam或aExam。不是Exam
标签: ios arrays swift uitableview alamofire