2016-06-22 3 views
1

カスタムセルデリゲートを使用して、カスタムセルのボタンが押されたときに関数を呼び出す。カスタムセルクラスのブール変数に応じて、ボタンのイメージを特定のイメージに変更する必要があります。関数から送信されたクラス変数にアクセスしようとするとEXC_BAD_ACCESSエラーが発生する

私は委任なしでこれをどうやって行うことができるのか分かっていますが、ボタンが押されたときにアラートビューを表示したいのですが、カスタムセルクラス内でそれを行うことはできません。

私が実行している問題は、デリゲート関数内でカスタムセルプロパティにアクセスしようとするとEXC_BAD_ACCESSエラーが発生することです。ここに私のカスタムクラスのための私のコードは次のとおりです。

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

悪いアクセスエラーが発生します。

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 
} 

}

そしてここでは、セルが含まれているテーブルビューコントローラ内からの関数呼び出しは、私はきちんとトンにアクセスするにはどうすればよい

if(sender.followTapped == false){ 

:デリゲート機能のこの最初の行に彼はカスタムセルオブジェクトから変数を変更できますか?

答えて

0

私の間違いは私のcellForRowAtIndexPathメソッドの中にあることに気付きました。私が悪いのアクセスを想像

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

:問題は、ボタンが(私のカスタムセルクラスにIBAction経由)タップされたときにデリゲートメソッドを呼び出すことに加えて、私もcellForRowAtIndexPath方法に以下の行を持っていたことでした何らかの理由で同じ「フォロー」メソッドが呼び出されていたために、送信側のセルがパラメータとして渡されなかったことを意味するメインビューコントローラの内部から発生していました。

関連する問題