从 XIb 加载视图崩溃
Posted
技术标签:
【中文标题】从 XIb 加载视图崩溃【英文标题】:Load View from XIb crashes 【发布时间】:2017-02-16 10:27:03 【问题描述】:我正在使用 xib 加载视图,但它总是崩溃。我尝试了网上可用的不同方法,但它仍然崩溃。我没有找到任何解决方案来处理。我附上了代码供参考Click here
【问题讨论】:
崩溃消息是什么? EXE_BAD_ACCESS 总是出现 【参考方案1】:我检查了您的代码,问题是您会将视图类提供给文件所有者,并根据它更改 IBOutlets 和 IBActions。
所以第一件事就是将“CartView”提供给 FileOwner 并将其从视图中删除。
然后从手势中删除 IBAction,从 lbl 和 img 中删除 IBOutlets,然后再次分配将引用文件所有者。
【讨论】:
【参考方案2】:你做错了。您已将 xib 和情节提要中的视图的类设置为 Cart。
尝试从 viewController 加载 nib 并将其添加为子视图。如果您需要将故事板中的小视图作为容器,只需创建一个插座并将卡片视图作为子视图添加到容器中。
【讨论】:
我认为这是从 xib 加载视图更合适的方法 好的,但是如果我想创建一个 IBDesignable 类怎么办。这样我必须从 Storyboard 继承它。 我认为不可能从 xib 设置 IBDesignable。您设置的图像不会反映在 IB 中 不,我说的是让类成为 IBDesignable 并在 Storyboard 的 ViewController 中设置它的子类。【参考方案3】:您正在尝试像这样加载购物车
private func loadViewFromNib() -> UIView
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "CartView", bundle: bundle)
let nibView = nib.instantiate(withOwner: self, options: nil).first as! UIView
return nibView
用它加载视图绝对没有问题。问题是您不应该在视图的类中加载视图。
您必须在 ViewController 中执行此操作。像这样:
func loadCartView() -> UIView!
if let customView = NSBundle.mainBundle().loadNibNamed("CartView", owner: self, options: nil).first as? CartView
customView.translatesAutoresizingMaskIntoConstraints = false
return customView
else
return nil
SWIFT3:
func loadCartView() -> UIView!
if let customView = Bundle.main.loadNibNamed("CartView", owner: self, options: nil)?.first as? CartView
customView.translatesAutoresizingMaskIntoConstraints = false
return customView
else
return nil
【讨论】:
Jason ,只是将 Cart 类添加到 File Owner 对我有用。无需在 VIewController 中添加。 我看到了你的代码。将 viewController 之外的视图作为子视图加载并不是一个好方法。 @Krishnanunni 也这么说。以上是关于从 XIb 加载视图崩溃的主要内容,如果未能解决你的问题,请参考以下文章
从 XIB 加载时 UICollectionViewCell 导致崩溃