2017-10-31 4 views
2

私はiOS用のswiftでクイズアプリケーションを構築しようとしています。私は450の質問を入れなければならないが、これは迅速なファイル上で多くの行を取るだろう。私の4つの質問には4行のコードがあり、約450の質問があることがわかります。質問を別のファイルから取得できるようにするために何をすべきかについての提案はありますか? RAMの過負荷が発生してアプリがクラッシュする可能性はありますか?ここに私のコードは次のとおりです。iOSアプリでクイズの質問を取得する方法と結果を印刷するには?

import UIKit 

struct Question { 
    var Question: String! 
    var Answers: [String]! 
    var Answer: Int! 
} 

class LittleTestViewController: UIViewController { 

    //MARK: Properties 
    @IBOutlet weak var questionLabel: UILabel! 
    @IBOutlet var buttons: [UIButton]! 

    var Questions = [Question]() 
    var QNumber = Int() 
    var answerNumber = Int() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     Questions = [ 
      Question(Question:"KEK1.Tα Συστήματα μη Επανδρωμένων Αεροσκαφών(ΣμηΕΑ) επιτρέπεται να ίπτανται:", Answers: ["α) Με μέγιστο ύψος τα 400 πόδια (FT) επάνω από το έδαφος ή την επιφάνεια της θάλασσας (AGL,MSL).","β)Εντός Προσωρινών Αποκλειστικών Περιοχών (Temporary Segregated Areas TSA) για πτήσεις ΣμηΕΑ.","γ)Σε καθορισμένα ίχνη και ύψη που προσδιορίζονται με ειδικές άδειες των Υπηρεσιών Εναέριας Κυκλοφορίας της ΥΠΑ.","δ) Όλες οι απαντήσεις είναι σωστές."], Answer: 3), 
      Question(Question:"ΚΕK2. Παρέχεται υπηρεσία Ελέγχου Εναέριας Κυκλοφορίας ‐ ΕΕΚ (Air Traffic Control‐ATC) στις πτήσεις ΣμηΕΑ;", Answers: ["α) Όχι, δεν παρέχονται υπηρεσίες εναέριας κυκλοφορίας ‐ ΕΚ (Air Traffic Services ‐ATS)","β) Ναι, παρέχεται υπηρεσία Ελέγχου Εναέριας Κυκλοφορίας (ATC).","γ) Όταν απαιτείται, οι Υπηρεσίες Εναέριας Κυκλοφορίας της ΥΠΑ εκδίδουν ειδικές άδειες και οδηγίες.","δ) Οι απαντήσεις α και γ είναι σωστές."], Answer: 3), 
     Question(Question:"KEK3. Τα ΣμηΕΑ (UAS) επιτρέπεται να πετούν:", Answers: ["α) Κάτω από ύψος 400 ποδιών, δηλαδή, κάτω από τα επιτρεπόμενα όρια για την κυκλοφορία επανδρωμένων αεροσκαφών.","β) Εντός προσωρινών περιοχών που προσδιορίζονται από τις υπηρεσίες εναέριας κυκλοφορίας της ΥΠΑ.","γ) Κάτω από ύψος 46.000 ποδιών, δηλαδή, κάνω από τα ανώτερα όρια του εναέριου χώρου για την κυκλοφορία επανδρωμένων αεροσκαφών.","δ) Οι απαντήσεις α και β είναι σωστές."], Answer: 3), 
     Question(Question:"ΚΕK4. Η διεξαγωγή Πτήσεων ΣμηΕΑ (UAS) απαγορεύεται γενικά σε εναέριο χώρο:", Answers: ["α) Σε περιοχές που διενεργούνται πτήσεις επανδρωμένων αεροσκαφών.","β) Σε απόσταση μικρότερη των 8 χιλιομέτρων από αεροδρόμια.","γ) Απαγορεύεται η πτήση ΣμηΕΑ (UAS) ανοικτής (Open) κατηγορίας επάνω από συγκεντρώσεις προσώπων.","δ) Όλες οι απαντήσεις είναι σωστές."], Answer: 3)] 


     pickQuestion() 

    } 

    func pickQuestion() 
    { 
     if Questions.count > 0 { 
      QNumber = Questions.count 
      questionLabel.text = Questions[QNumber].Question 

      answerNumber = Questions[QNumber].Answer 

      for i in 0..<buttons.count{ 
       buttons[i].setTitle(Questions[QNumber].Answers[i], for: UIControlState.normal) 
      } 
      Questions.remove(at: QNumber) 
     } 
     else 
     { 
      NSLog("Done") 
     } 
    } 
    @IBAction func bt1(_ sender: Any) { 
     if answerNumber == 0 { 
      pickQuestion() 
     } 
     else 
     { 
      NSLog("Wrong!") 
      pickQuestion() 
     } 
    } 
    @IBAction func btn2(_ sender: Any) { 
     if answerNumber == 1 { 
      pickQuestion() 
     } 
     else 
     { 
      NSLog("Wrong!") 
      pickQuestion() 
     } 
    } 
    @IBAction func btn3(_ sender: Any) { 
     if answerNumber == 2 { 
      pickQuestion() 
     } 
     else 
     { 
      NSLog("Wrong!") 
      pickQuestion() 
     } 
    } 
    @IBAction func btn4(_ sender: Any) { 
     if answerNumber == 3 { 
      pickQuestion() 
     } 
     else 
     { 
      NSLog("Wrong!") 
      pickQuestion() 
     } 
    } 

} 

答えて

1

あなたはすなわち

1.Questions.json

[{"question":"ques1","answers":["ans1", "ans2", "ans3"], "answer": 1}, 
{"question":"ques2","answers":["ans1", "ans2", "ans3"], "answer": 2}, 
{"question":"ques3","answers":["ans1", "ans2", "ans3"], "answer": 3}] 

2.ファイルの内容を読み、あなたのquestions arrayを作成し、すべてのデータを含むJSONファイルを作成することができます

if let path = Bundle.main.path(forResource: "Questions", ofType: "json") 
    { 
     if let array = (try? JSONSerialization.jsonObject(with: Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe), options: JSONSerialization.ReadingOptions.allowFragments)) as? [[String : Any]] 
     { 
      var questionsArray = [Question]() 
      for item in array 
      { 
       questionsArray.append(Question(item: item)) 
      } 
      print(questionsArray) 
     } 
    } 

3.Question struct

struct Question 
{ 
    var Question: String? 
    var Answers: [String]? 
    var Answer: Int? 

    init(item: [String: Any]) 
    { 
     self.Question = item["question"] as? String 
     self.Answers = item["answers"] as? [String] 
     self.Answer = item["answer"] as? Int 
    } 
} 
+0

あなたのJSONファイルの名前は何ですか? – PGDev

+0

ファイルがターゲットに含まれているかどうかを確認します。 – PGDev

+0

また、jsonファイルに追加したjsonが正しい形式であることを確認します。 – PGDev

1

私は質問と回答は静的内容ですので、あなたが.plistを試してみることができると思います。 UserDefaultsを使って、正しいカウントと誤ったカウントをトラッキングすることができます。

ただし、質問セットを拡張することを検討している場合は、SQLite/CoreDataを参照する必要があります。

関連する問題