0
我目前有一個webservice鏈接,它有一個問題和一組答案。我需要我的pickerview加載這些答案,但是這不是加載數組或任何數據。數組的名字叫做「答案」從Web服務獲取數組到一個pickerview
class QuestionsViewController: UIViewController, UIPickerViewDelegate {
@IBOutlet weak var usernamelabel: UILabel! //sets username label
@IBOutlet weak var Next: UIButton! //next button
@IBOutlet weak var itemLabel: UILabel! //item user has selected
@IBOutlet weak var Question: UILabel! //sets question label
@IBOutlet weak var pickerview: UIPickerView! //sets picker view
public var totalQuestions: Int = 0 //sets total question to 0
public var currentQuestion = 0 //sets current question to 0
public var totalCorrect: Int = 0 //sets totalcorrect to 0
var itemSelected: String = "" //item selected
var LabelText = String()
//let Exam = QuestionList() //uses the questions class for instances
//var Questions = QuestionList.getDummyQuestions()
@IBOutlet weak var share: UIButton!
//var listQuestions = [[String: AnyObject]]()
var listQuestions = [[String: AnyObject]]()
var titles: [String] = []
var quiz = QuestionList()
var ref: FIRDatabaseReference!
var refHandle: UInt!
override func viewDidLoad() {
super.viewDidLoad() //when the app is loaded
//authPlayer()
let url:String = "https://api.mlab.com/api/1/databases/quiz/collections/question?apiKey=NT28RNl6jX3Ys0x5GJZ6mMSRQEcb_6KA"
let urlRequest = URL(string: url)
URLSession.shared.dataTask(with: urlRequest!, completionHandler: {
(data, response, error) in
if(error != nil){
print(error.debugDescription)
}
else{
do{
self.listQuestions = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [[String:AnyObject]]
//self.tableview.reloadData()
}catch let error as NSError{
print(error)
}
}
}).resume()
share.isHidden = true
ref = FIRDatabase.database().reference() //reference
refHandle = ref.child("Questions").observe(.value, with: { (snapshot)in
let dataDict = snapshot.value as! [String: AnyObject]
print (dataDict)
})
usernamelabel.text = LabelText //username
pickerview.delegate = self
itemLabel.text = "" //loads the item label of whats selected
totalQuestions = QuestionList.getDummyQuestions().count
itemSelected = QuestionList.getDummyQuestions()[currentQuestion].answers[currentQuestion] //initially when loaded first item is selected
itemSelected = QuestionList.getDummyQuestions()[currentQuestion].answers[1]
//Question.text = QuestionList.getDummyQuestions()[currentQuestion].quest
//Question.text = Exam.quiz[currentQuestion][0] //first element in first row of array
Question.text = QuestionList.getDummyQuestions()[currentQuestion].quest
//cell.EventImgView.image = event["Image"] as? UIImage
//Question.text = q["Title"] as? String
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1 //return one component from the picker
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
//return QuestionList.getDummyQuestions()[currentQuestion].answers.count
//let q = listQuestions[row]
//return listQuestions[currentQuestion].count[row]
//return listQuestions.count[row]
return listQuestions.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
//return QuestionList.getDummyQuestions()[currentQuestion].answers[row]
let q = listQuestions[row]
return q["Answers"] as? String
//cell.EventImgView.image = event["Image"] as? UIImage
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){
itemSelected = QuestionList.getDummyQuestions()[currentQuestion].answers[row]
}
@IBAction func btnShareClicked(_ sender: UIButton) {
if SLComposeViewController.isAvailable(forServiceType: SLServiceTypeFacebook) {
let fbShare:SLComposeViewController = SLComposeViewController(forServiceType:SLServiceTypeFacebook)
//fbShare.setInitialText("You Scored on the IT Quiz:" + itemLabel.text!)
fbShare.setInitialText("You Scored " + itemLabel.text! + " on the IT Quiz")
self.present(fbShare, animated:true, completion:nil)
} else {
let alert = UIAlertController(title: "Account", message: "Please login to Facebook",
preferredStyle: UIAlertControllerStyle.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler:nil))
self.present(alert, animated: true, completion: nil)
}
}
func addGC(_ sender: Any) {
}
/*func authPlayer() {
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = {
(view, error) in
if view != nil {
self.present(view!, animated:true, completion: nil)
}
else {
print(GKLocalPlayer.localPlayer().isAuthenticated)
}
}
}
func saveHighScore(score: String) {
if GKLocalPlayer.localPlayer().isAuthenticated {
}
}*/
@IBAction func NextAction(_ sender: Any){
if (QuestionList.getDummyQuestions()[currentQuestion].isCorrectQuestion(itemSelected: itemSelected)) {
totalCorrect += 1
itemLabel.text = String(totalCorrect) + "/" + String(totalQuestions)
}
if(currentQuestion < totalQuestions - 1) {
pickerview.reloadAllComponents()
itemSelected = QuestionList.getDummyQuestions()[currentQuestion].answers[1]
Question.text = QuestionList.getDummyQuestions()[currentQuestion].quest
currentQuestion = currentQuestion + 1 //moves onto next question and increments
} else {
pickerview.isHidden = true
Question.text = "You have finished"
Next.isHidden = true
share.isHidden = false;
}
}
}
這仍然沒有加載組件在pickerview內? – Jonathon
好吧,它會。但是你的代碼是錯誤的。讓我編輯我的答案來解釋 – Devster101
感謝您的解釋,以便如何獲得我的代碼中的answers數組元素?謝謝 – Jonathon