Ich verwende einen benutzerdefinierten Zelldelegaten, um eine Funktion aufzurufen, wenn eine Schaltfläche in der benutzerdefinierten Zelle gedrückt wird. Ich möchte dann das Bild der Schaltfläche zu einem bestimmten Bild abhängig von einer booleschen Variable der benutzerdefinierten Zellklasse ändern.Fehler EXC_BAD_ACCESS beim Zugriff auf Klassenvariablen, die von Funktion
Mir ist bewusst, wie ich dies ohne Delegation tun kann, aber ich möchte auch eine Warnmeldung anzeigen, wenn die Schaltfläche gedrückt wird, und ich kann das nicht innerhalb der benutzerdefinierten Zellklasse tun.
Das Problem, auf das ich stoße, ist, dass ich einen EXC_BAD_ACCESS Fehler habe, wenn ich versuche, auf die benutzerdefinierten Zelleneigenschaften innerhalb der Delegatfunktion zuzugreifen. Hier ist mein Code für meine benutzerdefinierte Klasse:
import UIKit
protocol ProfileHeaderCellDelegate: class {
func follow(sender:ProfileHeaderCell)
}
class ProfileHeaderCell: UITableViewCell {
var followTapped = false
var delegate : ProfileHeaderCellDelegate!
@IBOutlet var profilePic: UIImageView!
@IBOutlet var followButton: UIButton!
@IBAction func followButtonTapped(sender: AnyObject) {
delegate?.follow(self)
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
self.profilePic.layer.cornerRadius = self.profilePic.frame.size.width/2;
self.profilePic.clipsToBounds = true;
}
@IBOutlet var albumArt: UIImageView!
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Und hier ist der Funktionsaufruf aus der Tabelle View-Controller, die die Zelle enthält:
func follow(sender: ProfileHeaderCell){
if(sender.followTapped == false){
sender.followButton.imageView?.image = UIImage(named: "img1")
sender.followTapped = true
}else if(sender.followTapped == true){
let unfollowAlert = UIAlertController(title: "", message:"Would you like to unfollow this User?", preferredStyle: .Alert)
let unfollow = UIAlertAction(title: "Yes, Unfollow this User", style: .Destructive){(ACTION) in
print("unfollow tapped")
sender.followButton.imageView!.image = UIImage(named: "img2")
}
let cancel = UIAlertAction(title: "Cancel", style: .Cancel){(ACTION) in
print("cancel tapped")
}
unfollowAlert.addAction(unfollow)
unfollowAlert.addAction(cancel)
self.presentViewController(unfollowAlert, animated: true, completion: nil)
}
}
Die schlechte Zugriffsfehler tritt auf In dieser ersten Zeile der Delegiertenfunktion:
if(sender.followTapped == false){
Wie kann ich richtig zugreifen t Die Variable vom benutzerdefinierten Zellenobjekt?