web-dev-qa-db-fra.com

Super.init n'est pas appelé avant le retour de l'initialiseur

J'essaie de donner à ma classe UITableViewCell un initiateur personnalisé, mais je n'arrive pas à comprendre ce que je fais mal. 

Voici mon code:

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")
}

J'ai essayé d'appeler super.init (frame: CGRect (...)) mais en implémentant ceci, je reçois une autre erreur: Doit appeler un initialiseur désigné de la super-classe 'UITableViewCell'

Que puis-je faire? Merci beaucoup!

14
Tom Kuschka

La méthode de travail des initiateurs consiste à ajouter leurs propres propriétés, constantes et fonctions à cette instance, puis à rappeler la superclasse pour un objet de ce type. Plus d'infos ici .

Pour cette raison, vous devez appeler l'initialiseur d'une super-classe avant de quitter l'initialiseur. Ici, je vous suggère d’appeler super.init() sur la dernière ligne de votre initialiseur. Vous pouvez choisir laquelle des méthodes init sur UITableViewCell est la plus appropriée.

12
vrwim
    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")
    }

J'espère que cela vous aidera Substituez la méthode init d'UIView à Swift

0
Mir Ashraf