2016-07-18 2 views
0

Je suis en train de faire un protocole dans une classe UITableViewCell mais quand je déclare mon délégué, je reçois une erreur dans les deux required init?(coder aDecoder: NSCoder) et override init(style: UITableViewCellStyle, reuseIdentifier: String?)Propriété « self.delegate » non initialisées à super.init

Erreur: - Property 'self.delegate' not initialised at super.init

Ceci est mon sous-classe: -

import UIKit 

protocol tableCellBtnActionDelegate{ 

func removeRowAtIndex(_: Int) 

} 

class FriendsListTableViewCell: UITableViewCell { 
@IBOutlet weak var friendListAddBtn: UIButton! 
var usersId : String! 
var buttonText : String! 
var indexPath : Int! 
let delegate : tableCellBtnActionDelegate! 
override func awakeFromNib() { 
    super.awakeFromNib() 
    friendListAddBtn.layer.cornerRadius = 4 
    friendListAddBtn.layer.backgroundColor = UIColor(red: 121.0/255.0, green: 220.0/255.0, blue: 1, alpha: 1).CGColor 
} 

required init?(coder aDecoder: NSCoder) { 

    super.init(coder: aDecoder) 
} 
override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

} 
override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 

    super.init(style: style, reuseIdentifier: reuseIdentifier) 

} 
} 

Errors

Répondre

0

changement

let delegate : tableCellBtnActionDelegate! 

à

var delegate : tableCellBtnActionDelegate! 

ou vous ne pouvez pas mettre en valeur la propriété de déléguer jamais

+0

Vous * peut * définir une valeur à un 'let' + implicitement déballés en option : dans un init. OP ne le fait pas. – Moritz

+0

@EricD ty pour commenter, il rend la réponse plus complète; Je ne crois tout simplement pas qu'il veut mettre un délégué dans init –

+0

Mettez à jour votre réponse, pour éviter les votes négatifs! –

2

Eh bien, vous avez initialiser pas, de sorte que le compilateur vous donne un avertissement. Je vous conseille de modifier le délégué pour être optionnel et de définir votre délégué quand vous en avez besoin.

var delegate : tableCellBtnActionDelegate? 

Vous devez également gérer le cas où le délégué n'est pas défini (néant).

+0

Je l'ai fait, n'a pas aidé. La fonction delegate n'est pas appelée, quand je l'ai changé en 'var delegate: tableCellBtnActionDelegate!', Cela m'a donné une erreur: 'nil'. – Dravidian

+1

C'est la bonne réponse pour résoudre le problème dans votre question. Vous devez vous assurer que vous définissez correctement le délégué et appelez la méthode déléguée. Vous n'avez montré aucun de ces bits de code – Paulw11

1

Vous avez reçu un avertissement car vous n'initialisez pas la propriété delegate. Il devrait en fait être une propriété faible, ou vous conserverez une référence à l'objet délégué, which you usually don't want to do. Donc, la meilleure approche serait:

weak var delegate : tableCellBtnActionDelegate?

Et alors vous devez l'utiliser comme ceci:

self.delegate?.notifyAboutSomething()