不会在表单元格中创建xCode Like按钮EXC_BAD_ACCESScode = 2,address = 0x7fff86e8d750

问题描述

有人知道为什么我在xCode v12中运行应用程序的模拟器时代码会抱怨吗? 我在行上收到错误消息: cell.likeControl.isFavored = request.isFavored

当我注释掉该行时,代码将正常运行。

代码

RequestTableViewController.swift

import UIKit

class RequestTableViewController: UITableViewController {
    
    //MARK: Properties
    var requests = [Request]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        loadSampledData()

        // Uncomment the following line to preserve selection between presentations
        // self.cleaRSSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem
    }  
(...)

    override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         // Table view cells are reused and should be dequeued using a cell identifier.
        let cellIdentifier = "RequestTableViewCell"

        guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier,for: indexPath) as? RequestTableViewCell else {
            fatalError("The dequeued cell is not an instance of RequestTableViewCell.")
        }
         
        // Fetches the appropriate request for the data source layout.
        let request = requests[indexPath.row]

        cell.wordLabel.text = request.word
        cell.countLabel.text = String(request.count)
        cell.likeControl.isFavored = request.isFavored
            
        return cell
    }

//MARK: Private methods
    private func loadSampledData() {
        guard let request1 = Request(word: "Ghetto",count: 5,isFavored: false) else {
            fatalError("Unable to instantiate request1")
        }
        
        guard let request2 = Request(word: "Skyskraber",count: 0,isFavored: false) else {
            fatalError("Unable to instantiate request2")
        }
        
        guard let request3 = Request(word: "Hjem",count: 1,isFavored: true) else {
            fatalError("Unable to instantiate request3")
        }
        print(requests)
        
        requests += [request1,request2,request3]
    }
}

RequestTableViewCell.swift

import UIKit

class RequestTableViewCell: UITableViewCell {
    @IBOutlet weak var wordLabel: UILabel!
    @IBOutlet weak var countLabel: UILabel!
    @IBOutlet weak var thumbsControl: ThumbsControl!
    
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool,animated: Bool) {
        super.setSelected(selected,animated: animated)

        // Configure the view for the selected state
    }

}

LikeControl.swift

import UIKit

@IBDesignable class LikeControl: UIStackView {
    //MARK: Properties
    private var thumbsImage = UIButton()
    var isFavored = false
    
    //MARK: Initialization
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupButton()
    }
     
    required init(coder: NSCoder) {
        super.init(coder: coder)
        setupButton()
    }
    
    //MARK: Button action
    @objc func likeButtonTapped(button: UIButton) {
        isFavored.toggle()
        
        print("Button updated")
    }
    
    //MARK: Private Methods
    private func setupButton() {

        let bundle = Bundle(for: type(of: self))
        let emptyUp = UIImage(named: "thumbs-up-regular",in: bundle,compatibleWith: self.traitCollection)
        let filledUp = UIImage(named: "thumbs-up-solid",compatibleWith: self.traitCollection)
        let highlightedUp = emptyUp?.withTintColor(.blue)
        let emptyDown = UIImage(named: "thumbs-down-regular",compatibleWith: self.traitCollection)
        
        let button = UIButton()
        
        button.setimage(emptyUp,for: .normal)
        button.setimage(filledUp,for: .selected)
        button.setimage(highlightedUp,for: .highlighted)
        button.setimage(emptyDown,for: [.highlighted,.selected])
        
        // Setup the button action
        button.addTarget(self,action: #selector(LikeControl.likeButtonTapped(button:)),for: .touchUpInside)
        
        print("Button created")
    }
}

Request.swift

import Foundation

class Request {
    
    //MARK: Properties
    var word: String
    var count: Int
    var isFavored: Bool
    
    //MARK: Initialization
    init?(word: String,count: Int,isFavored: Bool) {
        guard !word.isEmpty else {
            return nil
        }
        
        guard count >= 0 else {
            return nil
        }
        
        guard !isFavored || (isFavored && count > 0) else {
            return nil
        }
        
        self.word = word
        self.count = count
        self.isFavored = isFavored
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)