2017-12-14 6 views
0

Meine App hat einen UISwitch und abhängig von der Position des Switches wählt die App, welches Array benötigt wird. Wenn ich meine App starte und sie benutze, ohne den Schalter zu bewegen (lasse sie auf der isoN-Position stehen), stürzt die App ab. (Thread 1: Schwerwiegender Fehler: Index außerhalb des Bereichs)App stürzt ab, wenn UISwitch einmal verschoben wurde, um zu ändern, welches Array geladen wird

Solange ich es einmal bewege, funktioniert es dann wie ich gehofft hatte. Hier ist der Code:

import UIKit 

var selectedRunesArray = [Rune]() 

class SettingsViewController: UIViewController { 

    @IBOutlet weak var allowReversedRunesSwitch: UISwitch! 
    @IBOutlet weak var allowDuplicateRunesSwitch: UISwitch! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

    } 

    @IBAction func reversedRunesChanged(_ sender: UISwitch) { 

     if allowReversedRunesSwitch.isOn == true { 

      selectedRunesArray = runesIncReversedArray 

     } else { 
      selectedRunesArray = runesArray 
     } 

    } 

    @IBAction func duplicateRunesChanged(_ sender: UISwitch) { 

     if allowDuplicateRunesSwitch.isOn == true { 



     } else { 



     } 

    } 

} 

Ich dachte, vielleicht das Problem hier war, dass ich die App begonnen hatte, ab mit selectedRunesArray leer ist, so entschied es einen Anfangswert zu geben, wie folgt:

var seletcedRunesArray = runesIncReversedArray 

Diese gestoppt Die App stürzt ab, wenn Sie versuchen, sie zu benutzen, ohne den Switch zu bewegen, aber jetzt wird sie nicht mehr zwischen den 2 Arrays wechseln, je nachdem, wie der Schalterzustand aussehen soll.

+3

, indem es stürzt ab? Irgendeine Fehlermeldung in der Konsole dann? – Larme

+0

Sorry, ich habe vergessen, den Fehler anzuhängen. Bearbeitete ursprüngliche Nachricht jetzt – Elfuthark

+1

ist die IBAction auf dem WertDidChange? Überprüfen Sie, ob es angeschlossen ist. Setzen Sie einen Haltepunkt und sehen Sie, was passiert. Es ist richtig, das Array zunächst so einzustellen, dass die IBActions nur bei der Benutzerinteraktion aufgerufen werden. – BooRanger

Antwort

1

reversedRunesChanged Methode wird nicht aufgerufen, bis Sie den Zustand des Schalters ändern.

Also müssen Sie nur definieren, welches Array Sie zuerst in viewdidload laden möchten. Sie können entweder:

diese

selectedRunesArray = runesIncReversedArray 

oder

selectedRunesArray = runesArray 

und auch Sie können es tun, indem dieser Schalter Zustand in viewdidload Methode immer in viewdidload

if allowReversedRunesSwitch.isOn == true { 

      selectedRunesArray = runesIncReversedArray 

} else { 
      selectedRunesArray = runesArray 
} 
Verwandte Themen