2016-07-13 9 views
-3

initialisiert wird Was ich versuche, ist ein zufälliger Wert auf einem separaten View-Controller für meine Text-Eigenschaft, basierend auf welche von vier Tasten gedrückt wird. Der Compiler sagt mir, dass meine Texteigenschaft beim Aufruf von super.init nicht initialisiert wurde, und ich habe versucht, die Reihenfolge zu invertieren und die zwei Initialisierer in die erforderliche init zu kombinieren. Auch wenn es irgendwelche Vorschläge für eine bessere Möglichkeit gibt, den Text zu ändern, basierend auf welcher Schaltfläche gedrückt wird, lass es mich wissen. Vielen Dank!Fehler in Xcode sagen, dass meine gespeicherte Eigenschaft nicht auf super.init Anruf

class ViewController: UIViewController { 

var text: String 

@IBOutlet weak var successButton: UIButton! 
@IBOutlet weak var workButton: UIButton! 
@IBOutlet weak var relationshipsButton: UIButton! 
@IBOutlet weak var brightenDayButton: UIButton! 


// Initialize text property that will later be passed into the label on PageController 

init(text: String) { 
    self.text = text 
    super.init(nibName: nil, bundle: nil) 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) // error occurs here 

} 

func buttonPressed() -> String { 
    switch self { 
    case successButton.touchInside == true: text = successText 
    case workButton.touchInside == true: text = workText 
    case relationshipsButton.touchInside == true: text = relationshipText 
    case brightenDayButton.touchInside == true: text = brightenDayText 
    default: text = "Didn't work" 
    } 
    return text 
} 
+0

Sie müssen 'self.text' auf etwas setzen, bevor Sie' super.init (coder ...) '' – dan

Antwort

1

Normalerweise verwenden Sie erforderlichen Initialisierungen wie folgt aus:

required init?(coder aDecoder: NSCoder) { 
    let text = aDecoder.decodeObjectForKey("text") as String 

    self.init(text: text) 
} 

Sind Sie sicher, dass Sie diese Art von initializer brauchen?

+0

aufrufen Wenn ich das tue, beklagt Xcode, dass ich eine Eigenschaft an sich selbst setze. Wenn ich einen Textparameter in der erforderlichen init-Methode hinzufüge, fragt er nach einer anderen erforderlichen init-Methode, die fatalError implementiert. Gedanken? –

+0

Bitte sehen Sie meine aktualisierte Antwort. –

1

Da text ist ein nicht-optional die einfachste Lösung

var text = "" 

ist, die die Eigenschaft in der Deklarationszeile initialisiert.

+0

Dies löst dieses spezielle Problem. Was aber, wenn Sie mehr Mitglieder hinzufügen? Was ist, wenn Sie komplexe Typen haben? –

+0

Eine mögliche Alternative ist die faule Initialisierung. – vadian