如何解决不会在表单元格中创建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 举报,一经查实,本站将立刻删除。