我已经创建了一些自定义UIView,并在我的项目中的另一个UIView中实现了。
我在调用某些函数或为某些对象设置值时崩溃,但在设置属性时却没有崩溃。
请参考下面的代码以正确理解代码并提出问题。

class SearchProfileDetailView: UIView {

    @IBOutlet weak var userInfoTable: UITableView!

    var userObject: UserObject?

    override init(frame:CGRect) {
        super.init(frame: frame)
        loadViewFromNib()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        loadViewFromNib()
    }

    func loadViewFromNib() {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "SearchProfileDetailView", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        view.frame = bounds
        self.addSubview(view);

    }

    func setColor() {
        self.backgroundColor = UIColor.red
    }
}


我已在另一个UIView中将此SearchProfileDetailView与接口构建器和分配的插座一起使用,请参见下面的代码。

class SearchResultView: UIView {

    @IBOutlet weak var profileDetailView: SearchProfileDetailView!

    var currentIndex: Int?

    override init(frame:CGRect) {
        super.init(frame: frame)
        loadViewFromNib()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        loadViewFromNib()
    }

    func loadViewFromNib() {
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "SearchResultView", bundle: bundle)
        let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
        view.frame = bounds
        self.addSubview(view);
    }
    func setUserProfile(userObject: UserObject) {
        profileDetailView.backgroundColor = UIColor.red  // Not Crashed
        profileDetailView.userObject = userObject //Crashed with error mentioned in title of question
        profileDetailView.setColor() ////Crashed with error mentioned in title of question
    }
}



  调用profileDetailView.setColor()和时崩溃
  profileDetailView.userObject = userObject但未崩溃
  profileDetailView.backgroundColor = UIColor.red


现在,我已通过接口构建器将此SearchResultView用于UIViewController。

class ExploreViewController: UIViewController {

      @IBOutlet weak var searchResultView: SearchResultView!

      func getResult() {
           SearchAPIHandler().search(params: parameters) {[weak self] (responseData) in
           DispatchQueue.main.async {
                  guard let strongSelf = self else {
                            return
                   }
                   if let users = responseData.users, !users.isEmpty {
                          strongSelf.searchResultView.setUserProfile(userObject: users[0])
                   }
              }

      }
}

最佳答案

我已经尝试了很多,现在我已经知道问题出在我的界面生成器上。

没有模块。

我检查了从目标继承模块,一切正常。

ios - 设置对象或调用函数EXC_BAD_ACCESS(code = 257)时出错-LMLPHP

关于ios - 设置对象或调用函数EXC_BAD_ACCESS(code = 257)时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50850720/

10-12 15:01