2015-06-16 7 views
9

Cerco di dare alla mia UITableViewCell Class un inizializzatore personalizzato ma non riesco a capire cosa sto facendo male.Super.init non viene chiamato prima di tornare dall'inizializzatore

Ecco il mio codice:

init(dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?, cellHeight: CGRect, cellWidth: CGRect) { 
    self.dataObject = dataObject 
    self.Placeholder.text = placeholder 
    self.objectAttributeValues = objectAttributeValues 

    if segmentedControl != nil { 
     self.segmentedControl = segmentedControl! 
     didHaveSegmentedControl = true 
    } 

} 

required init(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

Ho provato a chiamare super.init (telaio: CGRect (...)), ma mediante l'attuazione di questo ottengo un altro errore: devono chiamare un inizializzatore designato della superclasse 'UITableViewCell'

Cosa posso fare? Grazie mille!

risposta

9

Il modo in cui gli inizializzatori funzionano, aggiungono le proprie proprietà, costanti e funzioni a tale istanza, quindi richiamano alla superclasse per un oggetto del tipo. Maggiori informazioni here.

Per questo motivo è necessario chiamare un inizializzatore di una superclasse prima di uscire dall'inizializzatore. Qui ti suggerisco di chiamare super.init() sull'ultima riga del tuo inizializzatore. È possibile scegliere quale dei metodi init su UITableViewCell è più appropriato.

+10

Se io chiamo il 'super.init()' l'errore "_Must chiamare un initialiser designato della superclasse 'UITableViewCell' _" sarà visualizzato ... –

+1

È necessario chiamare uno degli altri inizializzatori, a seconda di cosa si desidera eseguire. Controlla il completamento automatico per ulteriori informazioni. – vrwim

0
override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 
    convenience init(frame: CGRect, dataObject: [NSManagedObject]!, objectAttributeValues: [String]!,placeholder: String!, segmentedControl: UISegmentedControl?, cellHeight: CGRect, cellWidth: CGRect){ 
     self.init(frame: frame) 
     self.dataObject = dataObject 
     self.Placeholder.text = placeholder 
     self.objectAttributeValues = objectAttributeValues 

     if segmentedControl != nil { 
      self.segmentedControl = segmentedControl! 
      didHaveSegmentedControl = true 
     } 

    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

Spero che questo vi aiuterà a Override init method of UIView in swift