ios - 尝试访问从函数发送的类变量时出现 EXC_BAD_ACCESS 错误

标签 ios swift uitableview exc-bad-access

当按下自定义单元格中的按钮时,我正在使用自定义单元格委托(delegate)来调用函数。然后我想根据自定义单元格类的 bool 变量将按钮的图像更改为特定图像。

我知道如何在没有委托(delegate)的情况下执行此操作,但是我还想在按下按钮时显示警报 View ,而我无法在自定义单元格类中执行此操作。

我遇到的问题是在尝试访问委托(delegate)函数中的自定义单元格属性时出现 EXC_BAD_ACCESS 错误。这是我的自定义类的代码:

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
}

下面是包含单元格的 TableView Controller 中的函数调用:

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

错误访问错误发生在委托(delegate)函数的第一行:

if(sender.followTapped == false){

如何从自定义单元格对象正确访问变量?

最佳答案

我意识到我的错误出在我的 cellForRowAtIndexPath 方法中。问题是,除了在点击按钮时调用委托(delegate)方法(通过我的自定义单元格类中的 IBAction)之外,我还在 cellForRowAtIndexPath 方法中有以下行:

cell1.followButton.addTarget(self, action: "follow:", forControlEvents: .TouchUpInside)

我想错误访问的发生是因为以某种方式调用了相同的“follow”方法,但是是从主视图 Controller 内部调用的,这意味着发送方单元格从未作为参数传递。

关于ios - 尝试访问从函数发送的类变量时出现 EXC_BAD_ACCESS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37957299/

相关文章:

ios - 如何在 SWIFT 中的表格单元格上分配两个 Segue?

ios - 带有 Section 和 Parse 作为后端服务器的 UITableViewController

ios - 我应该考虑将 SpriteKit 用于非游戏 iOS 应用程序吗?

ios - 如何确定我需要为 UICollectionView 设置的高度?

ios - 添加约束时缺少自动布局 "Safe Area"

ios - 图像模糊前的轻微延迟

iphone - 如何从实例到核心数据?

ios - 如何在请勿打扰模式下播放 UILocalNotification 声音?

ios - NSData 未在 UIWebView lodadata 方法中正确加载

ios - UIAlertController 删除模糊层