2016-07-18 21 views
0

Ich versuche, ein Protokoll in einer UITableViewCell Klasse zu machen, aber wenn ich meine Delegierten erklären, bekomme ich einen Fehler in beiden required init?(coder aDecoder: NSCoder) und override init(style: UITableViewCellStyle, reuseIdentifier: String?)Property ‚self.delegate‘ nicht auf super.init initialisiert

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

Dies ist meine Unterklasse: -

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

Antwort

0

ändern

let delegate : tableCellBtnActionDelegate! 

zu

var delegate : tableCellBtnActionDelegate! 

oder Sie können nicht Wert Eigenschaft delegieren immer

+0

Sie * kann * auf einen Wert zu einem 'let' + implizit ungeöffneten optional : in einer Init. OP macht es einfach nicht. – Moritz

+0

@EricD ty für den Kommentar, es macht die Antwort mehr voll; Ich glaube nur nicht, dass er Delegierte in init setzen möchte –

+0

Aktualisieren Sie Ihre Antwort, um negative Stimmen zu verhindern! –

2

Nun, Sie haben es nicht initialisiert werden, so dass der Compiler eine Warnung gibt. Ich würde Ihnen raten, den Delegaten zu ändern, um optional zu sein und Ihren Delegierten einzustellen, wann immer Sie es benötigen.

var delegate : tableCellBtnActionDelegate? 

Sie sollten auch den Fall behandeln, in denen Delegierte nicht gesetzt ist (Null).

+0

Ich tat dies, half nicht. Die Delegat-Funktion wird nicht aufgerufen, wenn ich sie zurück in 'var delegate: tableCellBtnActionDelegate!' Änderte, gab es einen Fehler: 'nil'. – Dravidian

+1

Dies ist die richtige Antwort, um das Problem in Ihrer Frage zu beheben. Sie müssen sicherstellen, dass Sie den Delegaten korrekt festlegen und die Delegate-Methode aufrufen. Sie haben keinen dieser Codeabschnitte angezeigt – Paulw11

1

Sie haben eine Warnung erhalten, weil Sie die delegate Eigenschaft nicht initialisieren. Es sollte eigentlich eine schwache Eigenschaft sein, oder Sie behalten einen Verweis auf das Delegat-Objekt, which you usually don't want to do. So ist der beste Ansatz wäre:

weak var delegate : tableCellBtnActionDelegate?

Und dann müssen Sie es wie folgt verwendet werden:

self.delegate?.notifyAboutSomething()